Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 4 Dec 2011 08:49:08 -0800
From:      mdf@FreeBSD.org
To:        John Baldwin <jhb@freebsd.org>
Cc:        Zack Kirsch <zack@freebsd.org>, freebsd-arch@freebsd.org
Subject:   Re: Use of bool / stdbool.h in kernel
Message-ID:  <CAMBSHm9R8zLYNoewhK11zc_v-w2E-euETD0_b=-FUozZ1rD_3w@mail.gmail.com>
In-Reply-To: <201111301032.04102.jhb@freebsd.org>
References:  <CAMBSHm_Be0hCimgg0KpCFs24MHOW=LBczJbFZ3F1cOaCgrS8LA@mail.gmail.com> <20111130154604.B949@besplex.bde.org> <201111301032.04102.jhb@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Nov 30, 2011 at 7:32 AM, John Baldwin <jhb@freebsd.org> wrote:
> On Wednesday, November 30, 2011 12:13:53 am Bruce Evans wrote:
>> On Tue, 29 Nov 2011 mdf@freebsd.org wrote:
>>
>> > At $WORK we have a hack in one of the *.mk files to allow including
>> > stdbool.h in the kernel and we use it extensively. =A0This is not
>> > allowed by style(9), as far as I can tell, because the file is in
>> > include/stdbool.h and those files are not allowed to be included in
>> > kernel sources.
>>
>> Including stdbool.h in the kernel is not a style bug, but unsupported.
>>
>> > What I want to check on is, would it be acceptable to move stdbool.h
>> > from include/stdbool.h to sys/sys/stdbool.h (i.e. like errno.h) and
>> > then include it in the kernel as <sys/stdbool.h>? =A0That is, is the
>>
>> Would be a larger style bug, especially if it were actually used.
>> Even its spellings of TRUE and FALSE are strange. =A0Even in userland
>> stdbool.h is considered so useful that it is never used in src/bin
>> and is only used a few times on other src/*bin. =A0src/bin never uses
>> TRUE of FALSE either.
>
> I suspect there is some bias here though due to the fact that there wasn'=
t
> a standard bool type when most of this code was written. :) =A0I don't th=
ink
> that means we have to forgo use of the new type now that it is in fact
> standardized in C99. =A0I would be happy to have 'bool' available and the
> lowercase 'true' and 'false' are fine with me.

In further thinking, there's also a style issue of nested headers.
FreeBSD expects most types defined in sys/types.h so that it can be
included first and other files alphabetically.  Using <sys/stdbool.h>
would require any header with a bool parameter, return code, or struct
member to include <sys/stdbool.h>.  Alternatively, I could instead put
the same guards as stdbool.h uses and define bool, true, and false in
sys/types.h, but only for _KERNEL use (however, this also would create
issues with any file that is built in both user-space and kernel, and
unconditionally defining in sys/types.h could break existing buggy
applications).

*sigh*, part of the problem is the buggy way in which C99 added the
bool type.  I suppose code could always use the real reserved keyword
_Bool in headers, ugly though it is, and bool in implementation files.

I had a brief look, and for comparison Linux has the typedef in
linux/include/types.h IIRC but does not guard the definition nor did
it define true/false.

Thanks,
matthew



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAMBSHm9R8zLYNoewhK11zc_v-w2E-euETD0_b=-FUozZ1rD_3w>