aboutsummaryrefslogtreecommitdiffstats
path: root/XAlloc.c
diff options
context:
space:
mode:
authorDaniel Lange <DLange@git.local>2016-07-25 18:25:28 +0200
committerDaniel Lange <DLange@git.local>2016-07-25 18:25:28 +0200
commit31b71b67011fa52f091df6fe536a11d6d0bfb256 (patch)
tree31cb222871017376af8b7435d24cf4961863fa93 /XAlloc.c
parent8c82a38002ce09db2a0b83dab8b598cf1ab0596c (diff)
downloaddebian_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.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/XAlloc.c b/XAlloc.c
index cc29021..5f2e9a4 100644
--- a/XAlloc.c
+++ b/XAlloc.c
@@ -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;

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