diff options
author | Reid Spencer <rspencer@reidspencer.com> | 2006-08-21 06:02:44 +0000 |
---|---|---|
committer | Reid Spencer <rspencer@reidspencer.com> | 2006-08-21 06:02:44 +0000 |
commit | 42bcf6ea76b26ba1eee23d12e13ce197d2b4d0e7 (patch) | |
tree | 2e62ecbac6cb25ce2c802751e9cebab7e94da5dc /llvm/lib/System/Unix/Unix.h | |
parent | d9fec63d6a25c5bdd09e3f9da2dfd3d793909831 (diff) | |
download | bcm5719-llvm-42bcf6ea76b26ba1eee23d12e13ce197d2b4d0e7.tar.gz bcm5719-llvm-42bcf6ea76b26ba1eee23d12e13ce197d2b4d0e7.zip |
For PR797:
Remove all exception code from Program.inc and implement its new interface
with an ErrMsg string argument.
llvm-svn: 29790
Diffstat (limited to 'llvm/lib/System/Unix/Unix.h')
-rw-r--r-- | llvm/lib/System/Unix/Unix.h | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/llvm/lib/System/Unix/Unix.h b/llvm/lib/System/Unix/Unix.h index 4ef38963ffd..1516d453dd9 100644 --- a/llvm/lib/System/Unix/Unix.h +++ b/llvm/lib/System/Unix/Unix.h @@ -119,4 +119,35 @@ inline void ThrowErrno(const std::string& prefix, int errnum = -1) { throw prefix + ": " + buffer; } +/// This function builds an error message into \p ErrMsg using the \p prefix +/// string and the Unix error number given by \p errnum. If errnum is -1, the +/// default then the value of errno is used. +/// @brief Make an error message +inline void MakeErrMsg( + std::string* ErrMsg, const std::string& prefix, int errnum = -1) { + if (!ErrMsg) + return; + char buffer[MAXPATHLEN]; + buffer[0] = 0; + if (errnum == -1) + errnum = errno; +#ifdef HAVE_STRERROR_R + // strerror_r is thread-safe. + if (errnum) + strerror_r(errnum,buffer,MAXPATHLEN-1); +#elif HAVE_STRERROR + // Copy the thread un-safe result of strerror into + // the buffer as fast as possible to minimize impact + // of collision of strerror in multiple threads. + if (errnum) + strncpy(buffer,strerror(errnum),MAXPATHLEN-1); + buffer[MAXPATHLEN-1] = 0; +#else + // Strange that this system doesn't even have strerror + // but, oh well, just use a generic message + sprintf(buffer, "Error #%d", errnum); +#endif + *ErrMsg = buffer; +} + #endif |