cpp token_buffer not being NULL terminated causes fixproto bugs
Zack Weinberg
zack@wolery.cumb.org
Fri Apr 28 13:17:00 GMT 2000
On Fri, Apr 28, 2000 at 12:51:25PM -0700, Jason Merrill wrote:
> Why aren't we NULL-terminating names anymore?
Consistency. It's easier to say "nothing is NULL-terminated" than
"nothing is NULL-terminated except [...]".
> I specifically didn't change
> that because of code that wants to use strcmp. Using strncmp is wrong for
> these cases, since the test will also match, say, "inlineasnotehu!!".
>
> It might be appropriate to write a new macro which would test the length of
> the token, do a strncmp and then test that the next character in the other
> string is NULL.
This is a good idea. There is enough logic involved that it should be
an entire function:
/* Compares, in the manner of strcmp(3), the token beginning at TOKEN
and extending for LEN characters to the NUL-terminated string
STRING. Typical usage:
if (! cpp_idcmp (pfile->token_buffer + here, CPP_WRITTEN (pfile) - here,
"inline"))
{ ... }
*/
int
cpp_idcmp (token, limit, string)
const U_CHAR *token;
size_t len;
const char *string;
{
size_t len2 = strlen (string);
int r;
if (r = memcmp (token, string, MIN (len, len2)))
return r;
/* The longer of the two strings sorts after the shorter. */
if (len == len2)
return 0;
else if (len < len2)
return -1;
else
return 1;
}
Kaveh, does this look usable to you? If so, I'll take care of fixing
scan-decls.c. and fix-header.c. It may be awhile, I'm halfway through
a messy glue operation.
zw
More information about the Gcc-patches
mailing list