# endif
#endif
+#if (__GNUC__ >= 5) || ((__GNUC__ >= 4) && (__GNUC_MINOR__ >= 9))
+# define __ul_returns_nonnull __attribute__((returns_nonnull))
+#else
+# define __ul_returns_nonnull
+#endif
+
/*
* Force a compilation error if condition is true, but also produce a
* result (of value 0 and type size_t), so the expression can be used
#define err_oom() __err_oom(__FILE__, __LINE__)
-static inline __ul_alloc_size(1)
+static inline __ul_alloc_size(1) __ul_returns_nonnull
void *xmalloc(const size_t size)
{
void *ret = malloc(size);
return ret;
}
-static inline __ul_alloc_size(2)
+static inline __ul_alloc_size(2) __ul_returns_nonnull
void *xrealloc(void *ptr, const size_t size)
{
void *ret = realloc(ptr, size);
return ret;
}
-static inline __ul_calloc_size(1, 2)
+static inline __ul_calloc_size(1, 2) __ul_returns_nonnull
void *xcalloc(const size_t nelems, const size_t size)
{
void *ret = calloc(nelems, size);
return ret;
}
-static inline char __attribute__((warn_unused_result)) *xstrdup(const char *str)
+static inline char __attribute__((warn_unused_result)) __ul_returns_nonnull
+*xstrdup(const char *str)
{
char *ret;
return ret;
}
-static inline char * __attribute__((warn_unused_result)) xstrndup(const char *str, size_t size)
+static inline char * __attribute__((warn_unused_result)) __ul_returns_nonnull
+xstrndup(const char *str, size_t size)
{
char *ret;