Make up for attribute malloc with alloc_size

It is imperative that open source code be well attributed.
Sprinkle attribute((alloc_size)) here and there, telling gcc
how much memory we are actually allocating.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2013-04-25 19:59:35 -04:00
parent b231b54780
commit 750ef27274
2 changed files with 4 additions and 3 deletions

View file

@ -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))

View file

@ -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;