summaryrefslogtreecommitdiffstats
path: root/XAlloc.h
diff options
context:
space:
mode:
authorExplorer09 <explorer09@gmail.com>2016-06-02 20:38:24 +0800
committerExplorer09 <explorer09@gmail.com>2016-06-02 20:38:24 +0800
commit3297616efa05565b7944a83b11a9aabcdde08986 (patch)
treee5661e72fb9cae414df136681926bac51b27eac4 /XAlloc.h
parente288f690afdef701f76b7f85e25ca6bdf647716f (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.h14
1 files changed, 13 insertions, 1 deletions
diff --git a/XAlloc.h b/XAlloc.h
index 3cc060d9..22a6e8ab 100644
--- a/XAlloc.h
+++ b/XAlloc.h
@@ -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

© 2014-2024 Faster IT GmbH | imprint | privacy policy