From 9bcbce4201afada1c0ad8ada0cbfbbf58a52a6a7 Mon Sep 17 00:00:00 2001 From: Kay Sievers Date: Tue, 22 Oct 2013 03:27:38 +0200 Subject: [PATCH] bus: avoid 'bool' storage when retrieving 'b' from the message Just use an unsigned int as a bool type to avoid issues in the public message reading API; sizeof(bool) == 1, but the code copies 4 bytes at the pointers destination. --- src/hostname/hostnamed.c | 6 +++--- src/libsystemd-bus/bus-message.c | 2 +- src/libsystemd-bus/bus-util.c | 4 ++-- src/timedate/timedated.c | 12 ++++++------ 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c index db0762140..0854bc412 100644 --- a/src/hostname/hostnamed.c +++ b/src/hostname/hostnamed.c @@ -371,7 +371,7 @@ static int method_set_hostname(sd_bus *bus, sd_bus_message *m, void *userdata) { _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL; Context *c = userdata; const char *name; - bool interactive; + unsigned interactive; char *h; int r; @@ -421,7 +421,7 @@ static int method_set_static_hostname(sd_bus *bus, sd_bus_message *m, void *user _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL; Context *c = userdata; const char *name; - bool interactive; + unsigned interactive; int r; r = sd_bus_message_read(m, "sb", &name, &interactive); @@ -472,7 +472,7 @@ static int method_set_static_hostname(sd_bus *bus, sd_bus_message *m, void *user static int set_machine_info(Context *c, sd_bus *bus, sd_bus_message *m, int prop, sd_bus_message_handler_t cb) { _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL; - bool interactive; + unsigned interactive; const char *name; int r; diff --git a/src/libsystemd-bus/bus-message.c b/src/libsystemd-bus/bus-message.c index 511bdf503..cfc45a3f7 100644 --- a/src/libsystemd-bus/bus-message.c +++ b/src/libsystemd-bus/bus-message.c @@ -2741,7 +2741,7 @@ int sd_bus_message_read_basic(sd_bus_message *m, char type, void *p) { break; case SD_BUS_TYPE_BOOLEAN: - *(int*) p = !!*(uint32_t*) q; + *(unsigned*) p = !!*(uint32_t*) q; break; case SD_BUS_TYPE_INT16: diff --git a/src/libsystemd-bus/bus-util.c b/src/libsystemd-bus/bus-util.c index c72610466..42374fe16 100644 --- a/src/libsystemd-bus/bus-util.c +++ b/src/libsystemd-bus/bus-util.c @@ -148,7 +148,7 @@ int bus_verify_polkit( #ifdef ENABLE_POLKIT else { _cleanup_bus_message_unref_ sd_bus_message *reply = NULL; - bool authorized = false, challenge = false; + unsigned authorized = false, challenge = false; r = sd_bus_call_method( bus, @@ -267,7 +267,7 @@ int bus_verify_polkit_async( #ifdef ENABLE_POLKIT q = hashmap_remove(*registry, m); if (q) { - bool authorized, challenge; + unsigned authorized, challenge; /* This is the second invocation of this function, and * there's already a response from polkit, let's diff --git a/src/timedate/timedated.c b/src/timedate/timedated.c index 2ead4b999..809c80bad 100644 --- a/src/timedate/timedated.c +++ b/src/timedate/timedated.c @@ -45,8 +45,8 @@ typedef struct Context { char *zone; bool local_rtc; - int can_ntp; - int use_ntp; + unsigned can_ntp; + unsigned use_ntp; Hashmap *polkit_registry; } Context; @@ -521,7 +521,7 @@ static int method_set_timezone(sd_bus *bus, sd_bus_message *m, void *userdata) { _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL; Context *c = userdata; const char *z; - bool interactive; + unsigned interactive; char *t; int r; @@ -585,7 +585,7 @@ static int method_set_timezone(sd_bus *bus, sd_bus_message *m, void *userdata) { static int method_set_local_rtc(sd_bus *bus, sd_bus_message *m, void *userdata) { _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL; - bool lrtc, fix_system, interactive; + unsigned lrtc, fix_system, interactive; Context *c = userdata; struct timespec ts; int r; @@ -669,7 +669,7 @@ static int method_set_local_rtc(sd_bus *bus, sd_bus_message *m, void *userdata) static int method_set_time(sd_bus *bus, sd_bus_message *m, void *userdata) { _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL; - bool relative, interactive; + unsigned relative, interactive; Context *c = userdata; int64_t utc; struct timespec ts; @@ -735,7 +735,7 @@ static int method_set_time(sd_bus *bus, sd_bus_message *m, void *userdata) { static int method_set_ntp(sd_bus *bus, sd_bus_message *m, void *userdata) { _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL; - bool ntp, interactive; + unsigned ntp, interactive; Context *c = userdata; int r; -- 2.30.2