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

Rusty Russell (rusty@rustcorp.com.au)
Thu, 29 Aug 2002 13:15:57 +1000


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/