summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/shared/macro.h1
-rw-r--r--src/shared/util.h6
2 files changed, 4 insertions, 3 deletions
diff --git a/src/shared/macro.h b/src/shared/macro.h
index ac61b49588..0874102ece 100644
--- a/src/shared/macro.h
+++ b/src/shared/macro.h
@@ -28,6 +28,7 @@
#include <inttypes.h>
#define _printf_attr_(a,b) __attribute__ ((format (printf, a, b)))
+#define _alloc_(...) __attribute__ ((alloc_size(__VA_ARGS__)))
#define _sentinel_ __attribute__ ((sentinel))
#define _noreturn_ __attribute__((noreturn))
#define _unused_ __attribute__ ((unused))
diff --git a/src/shared/util.h b/src/shared/util.h
index c0398f1aec..69b717ed93 100644
--- a/src/shared/util.h
+++ b/src/shared/util.h
@@ -500,7 +500,7 @@ char *format_bytes(char *buf, size_t l, off_t t);
int fd_wait_for_event(int fd, int event, usec_t timeout);
-void* memdup(const void *p, size_t l);
+void* memdup(const void *p, size_t l) _alloc_(2);
int is_kernel_thread(pid_t pid);
@@ -560,14 +560,14 @@ static inline void umaskp(mode_t *u) {
#define _cleanup_umask_ _cleanup_(umaskp)
#define _cleanup_globfree_ _cleanup_(globfree)
-_malloc_ static inline void *malloc_multiply(size_t a, size_t b) {
+_malloc_ _alloc_(1, 2) static inline void *malloc_multiply(size_t a, size_t b) {
if (_unlikely_(b == 0 || a > ((size_t) -1) / b))
return NULL;
return malloc(a * b);
}
- static inline void *memdup_multiply(const void *p, size_t a, size_t b) {
+_alloc_(2, 3) static inline void *memdup_multiply(const void *p, size_t a, size_t b) {
if (_unlikely_(b == 0 || a > ((size_t) -1) / b))
return NULL;