diff options
author | Explorer09 <explorer09@gmail.com> | 2016-06-02 20:38:24 +0800 |
---|---|---|
committer | Explorer09 <explorer09@gmail.com> | 2016-06-02 20:38:24 +0800 |
commit | 3297616efa05565b7944a83b11a9aabcdde08986 (patch) | |
tree | e5661e72fb9cae414df136681926bac51b27eac4 /XAlloc.h | |
parent | e288f690afdef701f76b7f85e25ca6bdf647716f (diff) |
Add assert and __attribute__((nonnull)) on xStrdup
__attribute__((nonnull)) will help catching "calling with NULL" mistake on
compile time.
I also convert xStrdup into a macro, that will do assert() inline when the
code is *not* built with -DNDEBUG . For release builds (with -DNDEBUG),
preprocessor trick will ensure that generated code remains the same.
Diffstat (limited to 'XAlloc.h')
-rw-r--r-- | XAlloc.h | 14 |
1 files changed, 13 insertions, 1 deletions
@@ -15,6 +15,18 @@ void* xCalloc(size_t nmemb, size_t size); void* xRealloc(void* ptr, size_t size); -char* xStrdup(const char* str); +#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); #endif |