Re: [TRIVIAL] strlen("literal string") -> (sizeof("literal string")-1)

From: Rusty Russell (rusty@rustcorp.com.au)
Date: Wed Aug 28 2002 - 22:15:57 EST


In message <7vd6s2lc9c.fsf@siamese.dyndns.org> you write:
> >>>>> "JT" == Jim Treadway <jim@stardot-tech.com> writes:
>
> JT> Would redefining strlen() as __strlen() and then using
>
> JT> #define strlen(x) (__builtin_constant_p(x) ? (sizeof(x) - 1) : __strlen(x
))
>
> JT> work in this situation?
>
> I thought about that before I posted the previous patch, but
> rejected it.
>
> If it worked in all situations then it would have been great,
> but it fails in at least one way [*1*], so you cannot generally
> define the above in a header file which everybody includes.

If you really care about that, try:

        /* Be paranoid in case someone uses strlen(&("FOO"[0])) */
        #define strlen(x) \
                (__builtin_constant_p(x) && sizeof(x) != sizeof(char *)
                ? (sizeof(x) - 1) : __strlen(x))

Rusty.

--
  Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sat Aug 31 2002 - 22:00:25 EST