init fails to compile for !CONFIG_FEATURE_KILL_REMOVED
Ralf Friedl
Ralf.Friedl at online.de
Mon Feb 16 10:23:24 UTC 2009
Rob Landley wrote:
> On Sunday 15 February 2009 06:30:12 Bernhard Reutner-Fischer wrote:
>
>> On Sun, Feb 15, 2009 at 01:03:04PM +0100, Denys Vlasenko wrote:
>>
>>> On Sunday 15 February 2009 02:07, Rob Landley wrote:
>>>
>>>>> This is the case when #if is better than if
>>>>> (because #if would work, and if won't):
>>>>>
>>>> Or, alternately, this is a case where the kconfig logic isn't doing what
>>>> we want, and fixing it is one line:
>>>>
>>>> Index: scripts/kconfig/confdata.c
>>>> ===================================================================
>>>> --- scripts/kconfig/confdata.c (revision 25316)
>>>> +++ scripts/kconfig/confdata.c (working copy)
>>>> @@ -524,6 +524,7 @@
>>>> }
>>>> case S_INT:
>>>> str = sym_get_string_value(sym);
>>>> + if (!*str) str="0";
>>>> fprintf(out, "CONFIG_%s=%s\n", sym->name, str);
>>>> if (out_h) {
>>>> fprintf(out_h, "#define CONFIG_%s %s\n", sym->name, str);
>>>>
>>> Applied, thanks!
>>>
>> Shouldn't this better use the lower_bound -1 iff it's a range?
>>
>
> My general theory for chosing 0 was:
>
> A) this only triggers when it's disabled by a dependency on another boolean
> symbol anyway, so in theory the C code is going to be testing that other
> symbol so the optimizer can remove it. So it doesn't really matter what
> actual value it has as long as it resolves to a valid integer #define so it
> doesn't cause a syntax error before it gets optimized away.
>
> B) 0 is false in C.
If the value of the symbol was empty before, it should be valid C to use
"SYMBOL +0" or "SYMBOL -0". If SYMBOL is defined as an integer, this is
parsed as an expression with the value of SYMBOL. If SYMBOL is defined
as empty (not undefined), the "+0" or "-0" is parsed as an expression
with value 0.
Regards
Ralf Friedl
More information about the busybox
mailing list