#include "XAlloc.h" #include "RichString.h" #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif #include #include #include /*{ #include #include }*/ static inline void fail() { curs_set(1); endwin(); err(1, NULL); } void* xMalloc(size_t size) { void* data = malloc(size); if (!data && size > 0) { fail(); } return data; } void* xCalloc(size_t nmemb, size_t size) { void* data = calloc(nmemb, size); if (!data && nmemb > 0 && size > 0) { fail(); } return data; } void* xRealloc(void* ptr, size_t size) { void* data = realloc(ptr, size); if (!data && size > 0) { fail(); } return data; } #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) { fail(); } return data; }