Messages in this thread | | | Subject | Re: [TRIVIAL] strlen("literal string") -> (sizeof("literal string")-1) | From | junio@siamese ... | Date | 28 Aug 2002 17:49:51 -0700 |
| |
>>>>> "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/
| |