[pulseaudio-discuss] bools and bit-fields

Arun Raghavan arun.raghavan at collabora.co.uk
Thu Aug 18 07:53:43 PDT 2011


Hello,
There was some discussion on IRC in the past about this, but just to get
everybody's view on this ...

We currently define bools in various structures as:

    pa_bool_t my_bool:1;

While this seems innocuous, there are potentially subtle bugs of the
following kind:

    int x = TRUE;
    struct_with_bool y;
    y.my_bool = TRUE;

    if (x == y.my_bool)
        solve_world_peace();

The condition in the if statement may evaluate to false if pa_bool_t is
typedef'ed to a signed type (it definitely is if you don't have
stdbool.h, not sure if _Bool is a signed type or not). This happens
because it's a single bit field and thus when the msb (the only bit) is
set to 1 it is interpreted as -1.

Yes, this sort of comparison isn't common, but it can be quite
non-obvious and frustrating if you end up hitting a bug because of this.
The extra memory used will be in the range of a few thousand bytes in
the pathological case.

In my opinion, the space trade-off is worth it. Thoughts?

Cheers,
Arun



More information about the pulseaudio-discuss mailing list