Messages in this thread | | | Subject | Re: [PATCH] streq() | From | Daniel Egger <> | Date | 25 Sep 2002 13:27:32 +0200 |
| |
Am Die, 2002-09-24 um 06.49 schrieb Rusty Russell:
> Embarrassing, huh? But I just found a bug in my code cause by > "if (strcmp(a,b))" instead of "if (!strcmp(a,b))".
> diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.38/include/linux/string.h working-2.5.38-streq/include/linux/string.h > --- linux-2.5.38/include/linux/string.h 2002-06-06 21:38:40.000000000 +1000 > +++ working-2.5.38-streq/include/linux/string.h 2002-09-24 14:43:30.000000000 +1000 > @@ -15,7 +15,7 @@ extern "C" { > extern char * strpbrk(const char *,const char *); > extern char * strsep(char **,const char *); > extern __kernel_size_t strspn(const char *,const char *); > - > +#define streq(a,b) (strcmp((a),(b)) == 0)
Considering most compares will only care for equality/non-equality and not about the type of unequality a strcmp usually returns, wouldn't it be more wise and faster to use an approach like memcpy for comparison instead of that stupid compare each character approach?
Something along the lines of: Start comparying by granules with the biggest type the architecture has to offer which will fit into the length of the string and going down to the size of 1 char bailing out as soon as the granules don't match.
-- Servus, Daniel [unhandled content-type:application/pgp-signature] | |