[PATCH] logind: Use dbus_bool_t for bool types in dbus calls

Kristian Høgsberg hoegsberg at gmail.com
Thu Nov 21 16:24:41 PST 2013


On Thu, Nov 21, 2013 at 08:40:42AM +0100, David Herrmann wrote:
> Hi
> 
> On Thu, Nov 21, 2013 at 1:39 AM, Kristian Høgsberg <krh at bitplanet.net> wrote:
> > The gcc built-in 'bool' type is not the same size as dbus_bool_t, which is
> > an uint32_t.  Passing a pointer to bool where dbus expects a uint32_t *
> > doesn't work.
> 
> Nice catch! I hate dbus for that type.. happens to me all the time.
> Reviewed-by: David Herrmann <dh.herrmann at gmail.com>

Yes, it was a very mysterious bug to track down.  Patch committed.

> > ---
> >  src/logind-util.c | 5 +++--
> >  1 file changed, 3 insertions(+), 2 deletions(-)
> >
> > David,
> >
> > This fixes a crash that Artie hit when testing this.  Btw, did you get
> > a chance to update the logind error paths to return -1 and set errno
> > like we discussed?
> 
> I tried that, but systemd and dbus both return negative error codes
> instead of errno+-1. So I have to change like 90 places to do:
>   errno = -r;
>   r = -1;
> 
> I can do that, but I thought it looked ugly. As a compromise, I can
> only make the public logind-functions do that in the error-path? That
> would be only 5 places. Comments?

Sure, that's fine.

Kristian

> Thanks
> David
> 
> > diff --git a/src/logind-util.c b/src/logind-util.c
> > index 6bd0c26..a58265c 100644
> > --- a/src/logind-util.c
> > +++ b/src/logind-util.c
> > @@ -69,8 +69,9 @@ weston_logind_take_device(struct weston_logind *wl, uint32_t major,
> >                           uint32_t minor, bool *paused_out)
> >  {
> >         DBusMessage *m, *reply;
> > -       bool b, paused;
> > +       bool b;
> >         int r, fd;
> > +       dbus_bool_t paused;
> >
> >         m = dbus_message_new_method_call("org.freedesktop.login1",
> >                                          wl->spath,
> > @@ -287,7 +288,7 @@ get_active_cb(DBusPendingCall *pending, void *data)
> >         DBusMessage *m;
> >         DBusMessageIter iter, sub;
> >         int type;
> > -       bool b;
> > +       dbus_bool_t b;
> >
> >         dbus_pending_call_unref(wl->pending_active);
> >         wl->pending_active = NULL;
> > --
> > 1.8.3.1
> >


More information about the wayland-devel mailing list