util: introduce alloca0() and use it at a number of places
This commit is contained in:
parent
01f6c9d468
commit
ed5c5dbde1
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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); \
|
||||
})
|
||||
|
|
Loading…
Reference in a new issue