Re: [PATCH/RFC v3 6/8] Add case insensitivity support when using git ls-files

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Johannes Sixt wrote:
> On Sonntag, 3. Oktober 2010, Thomas Adam wrote:

>> It's a real shame about the code duplication here.  Can we not avoid
>> it just by doing:
>>
>> unsigned char c1 = (ignore_case) ? tolower(*match) : *match;
>> unisgned char c2 = (ignore_case) ? tolower(*name) : *name;
>>
>> I appreciate that to some it might look like perl golf, but...
>
> It has been discussed, and IIRC, the concensus was to keep the code 
> duplication because this is an inner loop.

Did anyone time it?  If it really is not dwarfed by other computation,
then how about (warning: ugly!)

static inline int step(unsigned char c1, unsigned char c2,
                       const char **match, const char **name, int *namelen)
{
	if (c1 == '\0' || is_glob_special(c1))
		return 1;	/* break */
	if (c1 != c2)
		return 0;	/* found mismatch! */
	(*match)++;
	(*name)++;
	(*namelen)--;
	return 2;	/* continue */
}
...

int r = 1;
if (!ignore_case) {
	while ((r = step(*match, *name, &match, &name, &namelen)) == 2)
		; /* matches so far */
} else {
	while ((r = step(tolower(*match), tolower(*name),
	                 &match, &name, &namelen)) == 2)
		; /* matches so far */
}
if (!r)	/* found mismatch! */
	return 0;
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]