summaryrefslogtreecommitdiff
path: root/src/dpl/core/src/errno_string.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/dpl/core/src/errno_string.cpp')
-rw-r--r--src/dpl/core/src/errno_string.cpp87
1 files changed, 43 insertions, 44 deletions
diff --git a/src/dpl/core/src/errno_string.cpp b/src/dpl/core/src/errno_string.cpp
index 5b1de37..fa04a45 100644
--- a/src/dpl/core/src/errno_string.cpp
+++ b/src/dpl/core/src/errno_string.cpp
@@ -34,66 +34,65 @@
#include <cchecker/dpl/scoped_free.h>
namespace CCHECKER {
-namespace // anonymous
-{
+namespace { // anonymous
const size_t DEFAULT_ERRNO_STRING_SIZE = 32;
} // namespace anonymous
std::string GetErrnoString(int error)
{
- size_t size = DEFAULT_ERRNO_STRING_SIZE;
- char *buffer = NULL;
-
- for (;;) {
- // Add one extra characted for end of string null value
- char *newBuffer = static_cast<char *>(::realloc(buffer, size + 1));
+ size_t size = DEFAULT_ERRNO_STRING_SIZE;
+ char *buffer = NULL;
- if (!newBuffer) {
- // Failed to realloc
- ::free(buffer);
- throw std::bad_alloc();
- }
+ for (;;) {
+ // Add one extra characted for end of string null value
+ char *newBuffer = static_cast<char *>(::realloc(buffer, size + 1));
- // Setup reallocated buffer
- buffer = newBuffer;
- ::memset(buffer, 0, size + 1);
+ if (!newBuffer) {
+ // Failed to realloc
+ ::free(buffer);
+ throw std::bad_alloc();
+ }
- // Try to retrieve error string
+ // Setup reallocated buffer
+ buffer = newBuffer;
+ ::memset(buffer, 0, size + 1);
+ // Try to retrieve error string
#if (_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && !_GNU_SOURCE
- // The XSI-compliant version of strerror_r() is provided if:
- int result = ::strerror_r(error, buffer, size);
+ // The XSI-compliant version of strerror_r() is provided if:
+ int result = ::strerror_r(error, buffer, size);
+
+ if (result == 0) {
+ ScopedFree<char> scopedBufferFree(buffer);
+ return std::string(buffer);
+ }
- if (result == 0) {
- ScopedFree<char> scopedBufferFree(buffer);
- return std::string(buffer);
- }
#else
- errno = 0;
+ errno = 0;
+ // Otherwise, the GNU-specific version is provided.
+ char *result = ::strerror_r(error, buffer, size);
- // Otherwise, the GNU-specific version is provided.
- char *result = ::strerror_r(error, buffer, size);
+ if (result != NULL) {
+ ScopedFree<char> scopedBufferFree(buffer);
+ return std::string(result);
+ }
- if (result != NULL) {
- ScopedFree<char> scopedBufferFree(buffer);
- return std::string(result);
- }
#endif
- // Interpret errors
- switch (errno) {
- case EINVAL:
- // We got an invalid errno value
- ::free(buffer);
- ThrowMsg(InvalidErrnoValue, "Invalid errno value: " << error);
+ // Interpret errors
+ switch (errno) {
+ case EINVAL:
+ // We got an invalid errno value
+ ::free(buffer);
+ ThrowMsg(InvalidErrnoValue, "Invalid errno value: " << error);
- case ERANGE:
- // Incease buffer size and retry
- size <<= 1;
- continue;
+ case ERANGE:
+ // Incease buffer size and retry
+ size <<= 1;
+ continue;
- default:
- Assert(0 && "Invalid errno value after call to strerror_r!");
- }
- }
+ default:
+ Assert(0 && "Invalid errno value after call to strerror_r!");
+ }
+ }
}
} // namespace CCHECKER