Subject: Re: CVS commit: src/distrib/utils/sysinst
To: None <source-changes@netbsd.org>
From: Christos Zoulas <christos@zoulas.com>
List: source-changes
Date: 07/18/2003 19:44:27
In article <yov5smp3ak37.fsf@ldt-sj3-010.sj.broadcom.com>,
 <cgd@broadcom.com> wrote:
>At Fri, 18 Jul 2003 15:28:07 +0000 (UTC), "John Hawkinson" wrote:
>> Perry E. Metzger <perry@piermont.com> wrote on Fri, 18 Jul 2003
>> at 10:21:31 -0400 in <87n0fbx6dw.fsf@snark.piermont.com>:
>> 
>> > David Laight <dsl@netbsd.org> writes:
>> > > Change a lot of 'if (strlen(x) == 0)' to 'if (x[0] === 0)'.
>> > 
>> > Why bother? Was this performance critical code? The former is clearer
>> > to the reader.
>> 
>> I do not think you can seriously argue that the clarity is stronger
>> either way.
>
>I'd disagree: the former includes some semantic meaning that the
>latter does not.

So what? Do you know what the programmer's intention was? Maybe he
wanted to see if the string was the empty string, in which case:

	strcmp(x, "") == 0

would be more appropriate :-)

>
>the former says "check the length of the string 'x' against 0".
>
>the latter says "does the first byte of the memory pointed to by 'x'
>happen to be 0?"

And it will take a moron a mental leap to go from:

	the first byte of the string is nul,
	strings are nul terminated,
	this is a check for the empty string.

>You might do the latter for many reasons, and a true newbie might not
>even understand that the latter has the effect of the former.

I would hope that a newbie would be only reading that code, not writing it.

>in terms of efficiency, i'd be a little surprised if current GCC
>development sources (with builtins allowed and optimization on)
>wouldn't transform the strlen(x) == 0 into the NUL cehck.

I would think that converting the strcmp(x, "") would be easier to optimize.

christos