On Thu, Sep 18, 2014 at 12:43:00PM +0200, David Herrmann wrote: > Hi > > On Thu, Sep 18, 2014 at 11:16 AM, Werner Fink <wer...@suse.de> wrote: > > On s390 the big endianness and cast from pointers of integers to > > the type of bool leads to the funny status messages that e.g. > > all targets are set to AllowIsolate=no even for multi-user.target. > > > > The gcc builtin type bool or _Bool has the size of one byte which > > should be taken into account in sd_bus_message_read_basic() as well > > as in bus_message_append_ap() > > We don't support "bool" in public APIs. sd-bus requires you to use > "int" for boolean types. If a caller uses "bool", they must be fixed.
Then I'd like to know why the header <stdbool.h> together with the therein provided type _Bool aka bool is used overall systemd. Also it is systemctl which does use sd_bus_message_read_basic() to parse the answer received over sd_bus of the status question send over sd_bus? linuxadmin:~ # uname -m s390x linuxadmin:~ # systemctl show multi-user.target | grep -E '=(yes|no)' CanStart=no CanStop=no CanReload=no CanIsolate=no StopWhenUnneeded=no RefuseManualStart=no RefuseManualStop=no AllowIsolate=no DefaultDependencies=no IgnoreOnIsolate=no IgnoreOnSnapshot=no NeedDaemonReload=no ConditionResult=no Transient=no > Thanks > David Werner > > --- > > src/libsystemd/sd-bus/bus-message.c | 19 +++++++++++++++---- > > 1 files changed, 15 insertions(+), 4 deletions(-) > > > > diff --git src/libsystemd/sd-bus/bus-message.c > > src/libsystemd/sd-bus/bus-message.c > > index bfb14fc..b70d814 100644 > > --- src/libsystemd/sd-bus/bus-message.c > > +++ src/libsystemd/sd-bus/bus-message.c > > @@ -2263,14 +2263,25 @@ int bus_message_append_ap( > > r = sd_bus_message_append_basic(m, *t, &x); > > break; > > } > > + case SD_BUS_TYPE_BOOLEAN: { > > + if (sizeof(bool) == sizeof(uint32_t)) { > > + uint32_t x; > > > > - case SD_BUS_TYPE_BOOLEAN: > > + x = va_arg(ap, uint32_t); > > + r = sd_bus_message_append_basic(m, *t, &x); > > + } else { > > + uint8_t x; > > + > > + x = (uint8_t) va_arg(ap, int); > > + r = sd_bus_message_append_basic(m, *t, &x); > > + } > > + break; > > + } > > case SD_BUS_TYPE_INT32: > > case SD_BUS_TYPE_UINT32: > > case SD_BUS_TYPE_UNIX_FD: { > > uint32_t x; > > > > - /* We assume a boolean is the same as int32_t */ > > assert_cc(sizeof(int32_t) == sizeof(int)); > > > > x = va_arg(ap, uint32_t); > > @@ -3233,7 +3244,7 @@ _public_ int sd_bus_message_read_basic(sd_bus_message > > *m, char type, void *p) { > > > > case SD_BUS_TYPE_BOOLEAN: > > if (p) > > - *(int*) p = !!*(uint8_t*) q; > > + *(bool*) p = !!*(uint8_t*) q; > > break; > > > > case SD_BUS_TYPE_INT16: > > @@ -3343,7 +3354,7 @@ _public_ int sd_bus_message_read_basic(sd_bus_message > > *m, char type, void *p) { > > > > case SD_BUS_TYPE_BOOLEAN: > > if (p) > > - *(int*) p = !!*(uint32_t*) q; > > + *(bool*) p = !!*(uint32_t*) q; > > break; > > > > case SD_BUS_TYPE_INT16: > > -- > > 1.7.7 -- "Having a smoking section in a restaurant is like having a peeing section in a swimming pool." -- Edward Burr
pgp2fuPRMAUTb.pgp
Description: PGP signature
_______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel