>>>>> "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.
Instead, you end up examining each use of strlen() and make the
above "#define" only where it does not break; it is not worth
the aggravation. Something named "strlen" must work in all
situations, and "in this situation" is not good enough.
Otherwise it would confuse/surprise people.
[Footnotes]
*1* It fails on the following:
#define FOOBARBAZ &("foobarbaz"[0])
void
main(void) {
int sz;
if (__builtin_constant_p(FOOBARBAZ)) {
sz = sizeof(FOOBARBAZ) - 1;
printf("sizeof(FOOBARBAZ) -1 = %d\n", sz);
}
printf("strlen(FOOBARBAZ) = %d\n", strlen(FOOBARBAZ));
exit(0);
}
-
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