diff options
author | Hisham Muhammad <hisham@gobolinux.org> | 2016-06-02 17:29:14 -0300 |
---|---|---|
committer | Hisham Muhammad <hisham@gobolinux.org> | 2016-06-02 17:29:14 -0300 |
commit | f9c1db514d078fa0cc73d62cdd25fcf49e9b071f (patch) | |
tree | e5661e72fb9cae414df136681926bac51b27eac4 /XAlloc.c | |
parent | ea9dc4ab744127f678c75c4ffeb999f5ec491d50 (diff) | |
parent | 3297616efa05565b7944a83b11a9aabcdde08986 (diff) |
Merge pull request #504 from Explorer09/xStrdup
Fixes upon xStrdup(NULL) problem
Diffstat (limited to 'XAlloc.c')
-rw-r--r-- | XAlloc.c | 18 |
1 files changed, 14 insertions, 4 deletions
@@ -5,6 +5,7 @@ #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif +#include <assert.h> #include <err.h> #include <stdlib.h> #include <string.h> @@ -43,10 +44,19 @@ void* xRealloc(void* ptr, size_t size) { return data; } -char* xStrdup(const char* str) { - if (!str) { - fail(); - } +#undef xStrdup +#undef xStrdup_ +#ifdef NDEBUG +# define xStrdup_ xStrdup +#else +# define xStrdup(str_) (assert(str_), xStrdup_(str_)) +#endif + +#if ((__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) +char* xStrdup_(const char* str) __attribute__((nonnull)); +#endif // GNU C 3.3 or later + +char* xStrdup_(const char* str) { char* data = strdup(str); if (!data) { fail(); |