1*9880d681SAndroid Build Coastguard Worker //===- llvm/Support/Unix/Unix.h - Common Unix Include File -------*- C++ -*-===// 2*9880d681SAndroid Build Coastguard Worker // 3*9880d681SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker // 5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker // 8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 9*9880d681SAndroid Build Coastguard Worker // 10*9880d681SAndroid Build Coastguard Worker // This file defines things specific to Unix implementations. 11*9880d681SAndroid Build Coastguard Worker // 12*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker #ifndef LLVM_LIB_SUPPORT_UNIX_UNIX_H 15*9880d681SAndroid Build Coastguard Worker #define LLVM_LIB_SUPPORT_UNIX_UNIX_H 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 18*9880d681SAndroid Build Coastguard Worker //=== WARNING: Implementation here must contain only generic UNIX code that 19*9880d681SAndroid Build Coastguard Worker //=== is guaranteed to work on all UNIX variants. 20*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Worker #include "llvm/Config/config.h" // Get autoconf configuration settings 23*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/Errno.h" 24*9880d681SAndroid Build Coastguard Worker #include <algorithm> 25*9880d681SAndroid Build Coastguard Worker #include <assert.h> 26*9880d681SAndroid Build Coastguard Worker #include <cerrno> 27*9880d681SAndroid Build Coastguard Worker #include <cstdio> 28*9880d681SAndroid Build Coastguard Worker #include <cstdlib> 29*9880d681SAndroid Build Coastguard Worker #include <cstring> 30*9880d681SAndroid Build Coastguard Worker #include <string> 31*9880d681SAndroid Build Coastguard Worker #include <sys/types.h> 32*9880d681SAndroid Build Coastguard Worker #include <sys/wait.h> 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Worker #ifdef HAVE_UNISTD_H 35*9880d681SAndroid Build Coastguard Worker #include <unistd.h> 36*9880d681SAndroid Build Coastguard Worker #endif 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Worker #ifdef HAVE_SYS_PARAM_H 39*9880d681SAndroid Build Coastguard Worker #include <sys/param.h> 40*9880d681SAndroid Build Coastguard Worker #endif 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Worker #ifdef HAVE_SYS_TIME_H 43*9880d681SAndroid Build Coastguard Worker # include <sys/time.h> 44*9880d681SAndroid Build Coastguard Worker #endif 45*9880d681SAndroid Build Coastguard Worker #include <time.h> 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Worker #ifdef HAVE_DLFCN_H 48*9880d681SAndroid Build Coastguard Worker # include <dlfcn.h> 49*9880d681SAndroid Build Coastguard Worker #endif 50*9880d681SAndroid Build Coastguard Worker 51*9880d681SAndroid Build Coastguard Worker /// This function builds an error message into \p ErrMsg using the \p prefix 52*9880d681SAndroid Build Coastguard Worker /// string and the Unix error number given by \p errnum. If errnum is -1, the 53*9880d681SAndroid Build Coastguard Worker /// default then the value of errno is used. 54*9880d681SAndroid Build Coastguard Worker /// @brief Make an error message 55*9880d681SAndroid Build Coastguard Worker /// 56*9880d681SAndroid Build Coastguard Worker /// If the error number can be converted to a string, it will be 57*9880d681SAndroid Build Coastguard Worker /// separated from prefix by ": ". 58*9880d681SAndroid Build Coastguard Worker static inline bool MakeErrMsg( 59*9880d681SAndroid Build Coastguard Worker std::string* ErrMsg, const std::string& prefix, int errnum = -1) { 60*9880d681SAndroid Build Coastguard Worker if (!ErrMsg) 61*9880d681SAndroid Build Coastguard Worker return true; 62*9880d681SAndroid Build Coastguard Worker if (errnum == -1) 63*9880d681SAndroid Build Coastguard Worker errnum = errno; 64*9880d681SAndroid Build Coastguard Worker *ErrMsg = prefix + ": " + llvm::sys::StrError(errnum); 65*9880d681SAndroid Build Coastguard Worker return true; 66*9880d681SAndroid Build Coastguard Worker } 67*9880d681SAndroid Build Coastguard Worker 68*9880d681SAndroid Build Coastguard Worker #endif 69