Re: [RFC][PATCH] A generic boolean (version 3)

From: ricknu-0
Date: Fri Jul 21 2006 - 19:10:46 EST


Here

Citerar ricknu-0@xxxxxxxxxxxxxx:

> From: Richard Knutsson
>
> A first step to a generic boolean-type. The patch just introduce the bool
> (in
> arch. i386 only (for the moment)), false and true + fixing some duplications
> in
> the code.
> It is diffed against Linus' git-tree (060718)
> Compiled with my own-, allyesconfig- and allmodconfig-config.h-file.
>
> -Why would we want it?
> -There is already some how are depending on a "boolean"-type (like NTFS).
> Also,
> it will clearify functions who returns a boolean from one returning a value,
> ex:
> bool it_is_ok();
> char it_is_ok();
> The first one is obvious what it is doing, the secound might return some sort
> of
> status.
>
> -Why false and not FALSE, why not "enum {...} bool"
> -They are not #define(d) and shouldn't because it is a value, like 'a'. But
> because it is just a value, then bool is just a variable and should be able
> to
> handle 0 and 1 equally well.
>
> Well, this is _my_ opinion, it may be totally wrong. If so, please tell me
> ;)
>
> If this takes off, I guess I will spend quite some time at kernel-janitors
> "cleaning" those who use a boolean-type.
>
> Til' next time...
> /Richard Knutsson
>
> PS
> Yes, I know about Andrew's try to unify TRUE and FALSE, did read the thread
> with
> interest (that's from where I got to know about _Bool). But mostly (then
> still
> on the subject) was some people did not want FALSE and TRUE instead of 0 and
> 1.
> I look at it as: 'a' = 97, if someone like to write 97 instead of 'a', please
> do
> if you find it easier to read. I, on the other hand, think it is easier with
> 'a', false/FALSE, NULL, etc.
> DS
>
> PPS
> One thing about _Bool thue:
> _Bool a = 12; results in a = 1
>
> test( char * t ) { t = 12; }
> main() {
> _Bool a;
> test( (char *) &a ); results in a = 12.
> }
>
> But I do not think of it as a problem since a "true" is just !false. Doing:
> if (boolvar == true)
> seems odd, after all...
>
> ... and sorry for the longwinded letter :)
> DDS
>
> Signed-off-by: Richard Knutsson <ricknu-0@xxxxxxxxxxxxxx>
>
> ---
>
> drivers/block/DAC960.h | 2 +-
> drivers/media/video/cpia2/cpia2.h | 4 ----
> drivers/net/dgrs.c | 1 -
> drivers/scsi/BusLogic.h | 5 +----
> include/asm-i386/types.h | 9 +++++++++
> include/linux/stddef.h | 2 ++
> 6 files changed, 13 insertions(+), 10 deletions(-)
>
>
>
> diff --git a/drivers/block/DAC960.h b/drivers/block/DAC960.h
> index a82f37f..f9217c3 100644
> --- a/drivers/block/DAC960.h
> +++ b/drivers/block/DAC960.h
> @@ -71,7 +71,7 @@ #define DAC690_V2_PciDmaMask 0xfffffffff
> Define a Boolean data type.
> */
>
> -typedef enum { false, true } __attribute__ ((packed)) boolean;
> +typedef bool boolean;
>
>
> /*
> diff --git a/drivers/media/video/cpia2/cpia2.h
> b/drivers/media/video/cpia2/cpia2.h
> index c5ecb2b..8d2dfc1 100644
> --- a/drivers/media/video/cpia2/cpia2.h
> +++ b/drivers/media/video/cpia2/cpia2.h
> @@ -50,10 +50,6 @@ #define CPIA2_PATCH_VER 0
> /***
> * Image defines
> ***/
> -#ifndef true
> -#define true 1
> -#define false 0
> -#endif
>
> /* Misc constants */
> #define ALLOW_CORRUPT 0 /* Causes collater to discard checksum */
> diff --git a/drivers/net/dgrs.c b/drivers/net/dgrs.c
> index fa4f094..4dbc23d 100644
> --- a/drivers/net/dgrs.c
> +++ b/drivers/net/dgrs.c
> @@ -110,7 +110,6 @@ static char version[] __initdata =
> * DGRS include files
> */
> typedef unsigned char uchar;
> -typedef unsigned int bool;
> #define vol volatile
>
> #include "dgrs.h"
> diff --git a/drivers/scsi/BusLogic.h b/drivers/scsi/BusLogic.h
> index 9792e5a..d6d1d56 100644
> --- a/drivers/scsi/BusLogic.h
> +++ b/drivers/scsi/BusLogic.h
> @@ -237,10 +237,7 @@ enum BusLogic_BIOS_DiskGeometryTranslati
> Define a Boolean data type.
> */
>
> -typedef enum {
> - false,
> - true
> -} PACKED boolean;
> +typedef bool boolean;
>
> /*
> Define a 10^18 Statistics Byte Counter data type.
> diff --git a/include/asm-i386/types.h b/include/asm-i386/types.h
> index 4b4b295..e35709a 100644

> --- a/include/asm-i386/types.h
> +++ b/include/asm-i386/types.h
> @@ -10,6 +10,15 @@ typedef unsigned short umode_t;
> * header files exported to user space
> */
>
> +#if defined(__GNUC__) && __GNUC__ >= 3
> +typedef _Bool bool;
> +#else
> +#warning You compiler doesn't seem to support boolean types, will set 'bool'
> as
> an 'unsigned char'
> +typedef unsigned char bool;
> +#endif
> +
> +typedef bool u2;
> +
> typedef __signed__ char __s8;
> typedef unsigned char __u8;
>
> diff --git a/include/linux/stddef.h b/include/linux/stddef.h
> index b3a2cad..5e5c611 100644
> --- a/include/linux/stddef.h
> +++ b/include/linux/stddef.h
> @@ -10,6 +10,8 @@ #else
> #define NULL ((void *)0)
> #endif
>
> +enum { false = 0, true = 1 } __attribute__((packed));
> +
> #undef offsetof
> #ifdef __compiler_offsetof
> #define offsetof(TYPE,MEMBER) __compiler_offsetof(TYPE,MEMBER)
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>



-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/