Messages in this thread | | | Date | Sat, 24 May 2008 11:06:21 +0100 | From | Jeremy Fitzhardinge <> | Subject | Re: kernel coding style for if ... else which cross #ifdef |
| |
Sam Ravnborg wrote: > On Fri, May 23, 2008 at 10:42:58PM -0700, H. Peter Anvin wrote: > >> Sam Ravnborg wrote: >> >>>> *However*, the best would really be if we changed Kconfig to emit >>>> configuration constants what were 0/1 instead of undefined/defined. >>>> That way we could do: >>>> >>>> if (CONFIG_SOMETHING && foo) { >>>> /* ... something ... */ >>>> } else if ((mode & S_IWUGO) == 0) { >>>> /* ... */ >>>> >>> We could do that - but then it would need another >>> name not to clash with all the places where we rely >>> on CONFIG_FOO='n' => CONFIG_FOO is not defined. >>> >>> We could teach kconfig to emit something like: >>> #define KFOO 0 (for the 'n' value) >>> And 1 or 2 for the y and m values. >>> >>> >> I don't think we want to use "1 or 2"... I suspect we want to use the >> same booleans we currently have. >> > I'm a bit dense (or I need more coffe - it's morning here). > What "same booleans"? >
They should be plain 0/1 booleans. For a bool/tristate option FOO, it would define:
Enabled y:
#define CONFIG_FOO #define CFG_FOO 1 #undef CONFIG_FOO_MODULE #define CFG_FOO_MODULE 0
Enabled m:
#define CONFIG_FOO #define CFG_FOO 1 #define CONFIG_FOO_MODULE #define CFG_FOO_MODULE 1
Disabled n:
#undef CONFIG_FOO #define CFG_FOO 0 #undef CONFIG_FOO_MODULE #define CFG_FOO_MODULE 0
Not sure what CFG_* should be for string/numeric options. Probably "1" if the value is defined, "0" if not, with CONFIG_* being the actual value (so a CONFIG_ value of 0 is distinguishable from not defined).
J
| |