diff options
author | Daniel Lange <DLange@git.local> | 2016-07-25 18:25:28 +0200 |
---|---|---|
committer | Daniel Lange <DLange@git.local> | 2016-07-25 18:25:28 +0200 |
commit | 31b71b67011fa52f091df6fe536a11d6d0bfb256 (patch) | |
tree | 31cb222871017376af8b7435d24cf4961863fa93 /XAlloc.c | |
parent | 8c82a38002ce09db2a0b83dab8b598cf1ab0596c (diff) | |
download | debian_htop-31b71b67011fa52f091df6fe536a11d6d0bfb256.tar.gz debian_htop-31b71b67011fa52f091df6fe536a11d6d0bfb256.tar.bz2 debian_htop-31b71b67011fa52f091df6fe536a11d6d0bfb256.zip |
Imported Upstream version 2.0.2upstream/2.0.2
Diffstat (limited to 'XAlloc.c')
-rw-r--r-- | XAlloc.c | 23 |
1 files changed, 20 insertions, 3 deletions
@@ -10,6 +10,7 @@ #include <string.h> /*{ +#include <assert.h> #include <stdlib.h> }*/ @@ -29,7 +30,7 @@ void* xMalloc(size_t size) { void* xCalloc(size_t nmemb, size_t size) { void* data = calloc(nmemb, size); - if (!data) { + if (!data && nmemb > 0 && size > 0) { fail(); } return data; @@ -43,9 +44,25 @@ void* xRealloc(void* ptr, size_t size) { return data; } -char* xStrdup(const char* str) { +#undef xStrdup +#undef xStrdup_ +#ifdef NDEBUG +# define xStrdup_ xStrdup +#else +# define xStrdup(str_) (assert(str_), xStrdup_(str_)) +#endif + +#ifndef __has_attribute // Clang's macro +# define __has_attribute(x) 0 +#endif +#if (__has_attribute(nonnull) || \ + ((__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3))) +char* xStrdup_(const char* str) __attribute__((nonnull)); +#endif // __has_attribute(nonnull) || GNU C 3.3 or later + +char* xStrdup_(const char* str) { char* data = strdup(str); - if (!data && str) { + if (!data) { fail(); } return data; |