diff options
author | Lennart Poettering <lennart@poettering.net> | 2013-04-14 17:43:59 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2013-04-14 17:43:59 +0200 |
commit | ed5c5dbde1575d74c87ae9856fe61268d7ae8f4b (patch) | |
tree | f9cf03c29268df9b37e7f1cfd455752f8ef3ca74 | |
parent | 01f6c9d4685edbc38c8df9175286f0e312dc1938 (diff) |
util: introduce alloca0() and use it at a number of places
-rw-r--r-- | src/libsystemd-bus/bus-control.c | 7 | ||||
-rw-r--r-- | src/libsystemd-bus/bus-kernel.c | 3 | ||||
-rw-r--r-- | src/shared/util.h | 8 |
3 files changed, 11 insertions, 7 deletions
diff --git a/src/libsystemd-bus/bus-control.c b/src/libsystemd-bus/bus-control.c index 5296029fd6..e980bfc740 100644 --- a/src/libsystemd-bus/bus-control.c +++ b/src/libsystemd-bus/bus-control.c @@ -66,10 +66,9 @@ int sd_bus_request_name(sd_bus *bus, const char *name, int flags) { size_t l; l = strlen(name); - n = alloca(offsetof(struct kdbus_cmd_name, name) + l + 1); + n = alloca0(offsetof(struct kdbus_cmd_name, name) + l + 1); n->size = offsetof(struct kdbus_cmd_name, name) + l + 1; n->name_flags = flags; - n->id = 0; memcpy(n->name, name, l+1); #ifdef HAVE_VALGRIND_MEMCHECK_H @@ -121,10 +120,8 @@ int sd_bus_release_name(sd_bus *bus, const char *name) { size_t l; l = strlen(name); - n = alloca(offsetof(struct kdbus_cmd_name, name) + l + 1); + n = alloca0(offsetof(struct kdbus_cmd_name, name) + l + 1); n->size = offsetof(struct kdbus_cmd_name, name) + l + 1; - n->name_flags = 0; - n->id = 0; memcpy(n->name, name, l+1); #ifdef HAVE_VALGRIND_MEMCHECK_H diff --git a/src/libsystemd-bus/bus-kernel.c b/src/libsystemd-bus/bus-kernel.c index b2d98c05d7..264c6994d9 100644 --- a/src/libsystemd-bus/bus-kernel.c +++ b/src/libsystemd-bus/bus-kernel.c @@ -474,8 +474,7 @@ int bus_kernel_create(const char *name, char **s) { return -errno; l = strlen(name); - make = alloca(offsetof(struct kdbus_cmd_bus_make, name) + DECIMAL_STR_MAX(uid_t) + 1 + l + 1); - memset(make, 0, offsetof(struct kdbus_cmd_bus_make, name)); + make = alloca0(offsetof(struct kdbus_cmd_bus_make, name) + DECIMAL_STR_MAX(uid_t) + 1 + l + 1); sprintf(make->name, "%lu-%s", (unsigned long) getuid(), name); make->size = offsetof(struct kdbus_cmd_bus_make, name) + strlen(make->name) + 1; make->flags = KDBUS_ACCESS_WORLD | KDBUS_POLICY_OPEN; diff --git a/src/shared/util.h b/src/shared/util.h index ad9753655a..b33fdb5b7a 100644 --- a/src/shared/util.h +++ b/src/shared/util.h @@ -657,3 +657,11 @@ static inline unsigned decimal_str_max(unsigned x) { } int unlink_noerrno(const char *path); + +#define alloca0(n) \ + ({ \ + char *__new; \ + size_t __len = n; \ + __new = alloca(__len); \ + (void *) memset(__new, 0, __len); \ + }) |