[flashrom] [PATCH] Use strlen for const strings
David Borg
borg.db at gmail.com
Thu Oct 14 23:31:53 CEST 2010
Don't know whether I can ack this, but after modifiying the conditionals to
always compile that part of the code, gcc did in fact compute the strlen
result.
$ gcc -v
Using built-in specs.
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro
4.4.4-14ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs
--enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr
--program-suffix=-4.4 --enable-shared --enable-multiarch
--enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib
--without-included-gettext --enable-threads=posix
--with-gxx-include-dir=/usr/include/c++/4.4 --libdir=/usr/lib --enable-nls
--with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug
--enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic
--enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu
--target=x86_64-linux-gnu
Thread model: posix
gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5)
Relevant outputs from processor_enable.c.003t.original after adding
-fdump-tree-original to CFLAGS in the Makefile are inlined:
On 30 September 2010 02:41, Carl-Daniel Hailfinger <
c-d.hailfinger.devel.2006 at gmx.net> wrote:
> Replace sizeof("string")-1 with strlen("string")
>
> We want to avoid calls to strlen at runtime if the string is already
> known at compile time.
> Turns out that gcc and clang will recognize constant strings and compute
> the strlen result already at compile time, so trickery with sizeof only
> reduces readability but does not improve the code.
>
> Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net>
>
> Index: flashrom-const_strlen/processor_enable.c
> ===================================================================
> --- flashrom-const_strlen/processor_enable.c (Revision 1183)
> +++ flashrom-const_strlen/processor_enable.c (Arbeitskopie)
> @@ -56,13 +56,13 @@
> while (*ptr && isspace(*ptr))
> ptr++;
> /* "cpu" part appears only with some Linux versions. */
> - if (strncmp(ptr, "cpu", sizeof("cpu") - 1) == 0)
> - ptr += sizeof("cpu") - 1;
> + if (strncmp(ptr, "cpu", strlen("cpu")) == 0)
> + ptr += strlen("cpu");
>
if (strncmp ((const char *) ptr, (const char *) "cpu", 3) == 0)
{
ptr = ptr + 3;
}
> while (*ptr && isspace(*ptr))
> ptr++;
> - if (strncmp(ptr, "model", sizeof("model") - 1) != 0)
> + if (strncmp(ptr, "model", strlen("model")) != 0)
> continue;
> - ptr += sizeof("model") - 1;
> + ptr += strlen("model");
>
if (strncmp ((const char *) ptr, (const char *) "model", 5) != 0)
{
// predicted unlikely by continue predictor.;
goto <D.4030>;
}
ptr = ptr + 5;
> while (*ptr && isspace(*ptr))
> ptr++;
> if (*ptr != ':')
> @@ -72,9 +72,9 @@
> ptr++;
> fclose(cpuinfo);
> return (strncmp(ptr, "ICT Loongson-2 V0.3",
> - sizeof("ICT Loongson-2 V0.3") - 1) == 0)
> + strlen("ICT Loongson-2 V0.3")) == 0)
> || (strncmp(ptr, "Godson2 V0.3 FPU V0.1",
> - sizeof("Godson2 V0.3 FPU V0.1") - 1) ==
> 0);
> + strlen("Godson2 V0.3 FPU V0.1")) == 0);
> }
>
fclose (cpuinfo);
return strncmp ((const char *) ptr, (const char *) "ICT Loongson-2
V0.3", 19) == 0 || strncmp ((const char *) ptr, (const char *) "Godson2
V0.3 FPU V0.1", 22) == $
}
> fclose(cpuinfo);
> return 0;
>
>
> --
> http://www.hailfinger.org/
>
>
> _______________________________________________
> flashrom mailing list
> flashrom at flashrom.org
> http://www.flashrom.org/mailman/listinfo/flashrom
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.flashrom.org/pipermail/flashrom/attachments/20101014/cfd07d9b/attachment.html>
More information about the flashrom
mailing list