cppfiles.c (_cpp_execute_include): Don't make a null-terminated copy of the filename.
* cppfiles.c (_cpp_execute_include): Don't make a null-terminated copy of the filename. Don't use CPP_PREV_BUFFER. Don't call strlen or strcpy; we already know the length. (_cpp_compare_file_date): Similarly. * cpphash.h (struct cpp_reader): Delete done_initialising. (CPP_PREV_BUFFER): Delete. * cppinit.c (cpp_start_read): Don't set done_initialising. * cpplex.c (parse_string): Guarantee null-termination. (_cpp_equiv_toklists): Remove. * cpplib.c (glue_header_name): Null-terminate. (do_line): Don't leak memory. * cpplib.h (BT_WEAK): Delete. * cppmain.c (cb_ident): Strings are now null-terminated. From-SVN: r40233
This commit is contained in:
parent
91c704c458
commit
7868b4a252
@ -1,3 +1,19 @@
|
||||
2001-03-04 Neil Booth <neil@daikokuya.demon.co.uk>
|
||||
|
||||
* cppfiles.c (_cpp_execute_include): Don't make a null-terminated
|
||||
copy of the filename. Don't use CPP_PREV_BUFFER. Don't call
|
||||
strlen or strcpy; we already know the length.
|
||||
(_cpp_compare_file_date): Similarly.
|
||||
* cpphash.h (struct cpp_reader): Delete done_initialising.
|
||||
(CPP_PREV_BUFFER): Delete.
|
||||
* cppinit.c (cpp_start_read): Don't set done_initialising.
|
||||
* cpplex.c (parse_string): Guarantee null-termination.
|
||||
(_cpp_equiv_toklists): Remove.
|
||||
* cpplib.c (glue_header_name): Null-terminate.
|
||||
(do_line): Don't leak memory.
|
||||
* cpplib.h (BT_WEAK): Delete.
|
||||
* cppmain.c (cb_ident): Strings are now null-terminated.
|
||||
|
||||
2001-03-04 Laurynas Biveinis <lauras@softhome.net>
|
||||
|
||||
* gcc.c (convert_filename): Append executable suffix
|
||||
|
@ -585,10 +585,9 @@ _cpp_execute_include (pfile, header, no_reinclude, include_next)
|
||||
int include_next;
|
||||
{
|
||||
struct search_path *search_start = 0;
|
||||
unsigned int len = header->val.str.len;
|
||||
unsigned int angle_brackets = header->type == CPP_HEADER_NAME;
|
||||
const char *fname = (const char *) header->val.str.text;
|
||||
struct include_file *inc;
|
||||
char *fname;
|
||||
int print_dep;
|
||||
|
||||
/* Help protect #include or similar from recursion. */
|
||||
@ -626,10 +625,6 @@ _cpp_execute_include (pfile, header, no_reinclude, include_next)
|
||||
}
|
||||
}
|
||||
|
||||
fname = alloca (len + 1);
|
||||
memcpy (fname, header->val.str.text, len);
|
||||
fname[len] = '\0';
|
||||
|
||||
if (!search_start)
|
||||
{
|
||||
if (angle_brackets)
|
||||
@ -660,8 +655,8 @@ _cpp_execute_include (pfile, header, no_reinclude, include_next)
|
||||
/* Handle -H option. */
|
||||
if (CPP_OPTION (pfile, print_include_names))
|
||||
{
|
||||
cpp_buffer *fp = CPP_BUFFER (pfile);
|
||||
while ((fp = CPP_PREV_BUFFER (fp)) != NULL)
|
||||
cpp_buffer *fp = pfile->buffer;
|
||||
while ((fp = fp->prev) != NULL)
|
||||
putc ('.', stderr);
|
||||
fprintf (stderr, " %s\n", inc->name);
|
||||
}
|
||||
@ -692,13 +687,13 @@ _cpp_execute_include (pfile, header, no_reinclude, include_next)
|
||||
|
||||
/* FIXME: ptr can be null, no? */
|
||||
len = ptr->len;
|
||||
p = (char *) alloca (len + strlen (fname) + 2);
|
||||
p = (char *) alloca (len + header->val.str.len + 2);
|
||||
if (len)
|
||||
{
|
||||
memcpy (p, ptr->name, len);
|
||||
p[len++] = '/';
|
||||
}
|
||||
strcpy (p + len, fname);
|
||||
memcpy (p + len, fname, header->val.str.len + 1);
|
||||
_cpp_simplify_pathname (p);
|
||||
deps_add_dep (pfile->deps, p);
|
||||
}
|
||||
@ -722,8 +717,7 @@ _cpp_compare_file_date (pfile, f)
|
||||
cpp_reader *pfile;
|
||||
const cpp_token *f;
|
||||
{
|
||||
unsigned int len = f->val.str.len;
|
||||
char *fname;
|
||||
const char *fname = (const char *) f->val.str.text;
|
||||
struct search_path *search_start;
|
||||
struct include_file *inc;
|
||||
|
||||
@ -732,9 +726,6 @@ _cpp_compare_file_date (pfile, f)
|
||||
else if (CPP_OPTION (pfile, ignore_srcdir))
|
||||
search_start = pfile->buffer->search_from;
|
||||
|
||||
fname = alloca (len + 1);
|
||||
memcpy (fname, f->val.str.text, len);
|
||||
fname[len] = '\0';
|
||||
inc = find_include_file (pfile, fname, search_start);
|
||||
|
||||
if (!inc)
|
||||
|
@ -339,10 +339,6 @@ struct cpp_reader
|
||||
/* We're printed a warning recommending against using #import. */
|
||||
unsigned char import_warning;
|
||||
|
||||
/* True after cpp_start_read completes. Used to inhibit some
|
||||
warnings while parsing the command line. */
|
||||
unsigned char done_initializing;
|
||||
|
||||
/* True if we are skipping a failed conditional group. */
|
||||
unsigned char skipping;
|
||||
|
||||
@ -380,7 +376,6 @@ extern unsigned char _cpp_trigraph_map[UCHAR_MAX + 1];
|
||||
|
||||
/* Macros. */
|
||||
|
||||
#define CPP_PREV_BUFFER(BUFFER) ((BUFFER)->prev)
|
||||
#define CPP_PRINT_DEPS(PFILE) CPP_OPTION (PFILE, print_deps)
|
||||
#define CPP_IN_SYSTEM_HEADER(PFILE) \
|
||||
(CPP_BUFFER (PFILE) && CPP_BUFFER (PFILE)->sysp)
|
||||
|
@ -948,8 +948,6 @@ cpp_start_read (pfile, fname)
|
||||
p = q;
|
||||
}
|
||||
|
||||
pfile->done_initializing = 1;
|
||||
|
||||
/* The -imacros files can be scanned now, but the -include files
|
||||
have to be pushed onto the buffer stack and processed later,
|
||||
otherwise cppmain.c won't see the tokens. include_head was built
|
||||
|
60
gcc/cpplex.c
60
gcc/cpplex.c
@ -629,10 +629,11 @@ unescaped_terminator_p (pfile, dest)
|
||||
}
|
||||
|
||||
/* Parses a string, character constant, or angle-bracketed header file
|
||||
name. Handles embedded trigraphs and escaped newlines.
|
||||
name. Handles embedded trigraphs and escaped newlines. The stored
|
||||
string is guaranteed NUL-terminated, but it is not guaranteed that
|
||||
this is the first NUL since embedded NULs are preserved.
|
||||
|
||||
Multi-line strings are allowed, but they are deprecated within
|
||||
directives. */
|
||||
Multi-line strings are allowed, but they are deprecated. */
|
||||
static void
|
||||
parse_string (pfile, token, terminator)
|
||||
cpp_reader *pfile;
|
||||
@ -651,14 +652,21 @@ parse_string (pfile, token, terminator)
|
||||
for (;;)
|
||||
{
|
||||
if (buffer->cur == buffer->rlimit)
|
||||
{
|
||||
c = EOF;
|
||||
unterminated (pfile, terminator);
|
||||
break;
|
||||
}
|
||||
else
|
||||
c = *buffer->cur++;
|
||||
|
||||
have_char:
|
||||
/* We need space for the terminating NUL. */
|
||||
if (dest >= limit)
|
||||
limit = _cpp_next_chunk (pool, 0, &dest);
|
||||
|
||||
if (c == EOF)
|
||||
{
|
||||
unterminated (pfile, terminator);
|
||||
break;
|
||||
}
|
||||
|
||||
/* Handle trigraphs, escaped newlines etc. */
|
||||
if (c == '?' || c == '\\')
|
||||
c = skip_escaped_newlines (buffer, c);
|
||||
@ -690,8 +698,9 @@ parse_string (pfile, token, terminator)
|
||||
if (pfile->mlstring_pos.line == 0)
|
||||
pfile->mlstring_pos = pfile->lexer_pos;
|
||||
|
||||
handle_newline (buffer, c); /* Stores to read_ahead. */
|
||||
c = '\n';
|
||||
c = handle_newline (buffer, c);
|
||||
*dest++ = '\n';
|
||||
goto have_char;
|
||||
}
|
||||
else if (c == '\0')
|
||||
{
|
||||
@ -699,25 +708,16 @@ parse_string (pfile, token, terminator)
|
||||
cpp_warning (pfile, "null character(s) preserved in literal");
|
||||
}
|
||||
|
||||
/* No terminating null for strings - they could contain nulls. */
|
||||
if (dest >= limit)
|
||||
limit = _cpp_next_chunk (pool, 0, &dest);
|
||||
*dest++ = c;
|
||||
|
||||
/* If we had a new line, the next character is in read_ahead. */
|
||||
if (c != '\n')
|
||||
continue;
|
||||
c = buffer->read_ahead;
|
||||
if (c != EOF)
|
||||
goto have_char;
|
||||
}
|
||||
|
||||
/* Remember the next character. */
|
||||
buffer->read_ahead = c;
|
||||
*dest = '\0';
|
||||
|
||||
token->val.str.text = POOL_FRONT (pool);
|
||||
token->val.str.len = dest - token->val.str.text;
|
||||
POOL_COMMIT (pool, token->val.str.len);
|
||||
POOL_COMMIT (pool, token->val.str.len + 1);
|
||||
}
|
||||
|
||||
/* The stored comment includes the comment start and any terminator. */
|
||||
@ -1481,26 +1481,6 @@ _cpp_equiv_tokens (a, b)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* Compare two token lists. */
|
||||
int
|
||||
_cpp_equiv_toklists (a, b)
|
||||
const struct toklist *a, *b;
|
||||
{
|
||||
unsigned int i, count;
|
||||
|
||||
count = a->limit - a->first;
|
||||
if (count != (b->limit - b->first))
|
||||
return 0;
|
||||
|
||||
for (i = 0; i < count; i++)
|
||||
if (! _cpp_equiv_tokens (&a->first[i], &b->first[i]))
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Determine whether two tokens can be pasted together, and if so,
|
||||
what the resulting token is. Returns CPP_EOF if the tokens cannot
|
||||
be pasted, or the appropriate type for the merged token if they
|
||||
|
11
gcc/cpplib.c
11
gcc/cpplib.c
@ -525,8 +525,9 @@ glue_header_name (pfile, header)
|
||||
cpp_error (pfile, "missing terminating > character");
|
||||
else
|
||||
{
|
||||
token_mem = _cpp_pool_alloc (&pfile->ident_pool, total_len);
|
||||
token_mem = _cpp_pool_alloc (&pfile->ident_pool, total_len + 1);
|
||||
memcpy (token_mem, buffer, total_len);
|
||||
token_mem[total_len] = '\0';
|
||||
|
||||
header->type = CPP_HEADER_NAME;
|
||||
header->flags &= ~PREV_WHITE;
|
||||
@ -708,14 +709,10 @@ do_line (pfile)
|
||||
if (token.type == CPP_STRING)
|
||||
{
|
||||
char *fname;
|
||||
unsigned int len;
|
||||
unsigned int len = token.val.str.len + 1;
|
||||
|
||||
/* FIXME: memory leak. */
|
||||
len = token.val.str.len;
|
||||
fname = xmalloc (len + 1);
|
||||
fname = (char *) _cpp_pool_alloc (&pfile->ident_pool, len);
|
||||
memcpy (fname, token.val.str.text, len);
|
||||
fname[len] = '\0';
|
||||
|
||||
_cpp_simplify_pathname (fname);
|
||||
|
||||
/* Only accept flags for the # 55 form. */
|
||||
|
@ -463,9 +463,7 @@ enum builtin_type
|
||||
BT_BASE_FILE, /* `__BASE_FILE__' */
|
||||
BT_INCLUDE_LEVEL, /* `__INCLUDE_LEVEL__' */
|
||||
BT_TIME, /* `__TIME__' */
|
||||
BT_STDC, /* `__STDC__' */
|
||||
BT_WEAK /* Whether or not G++ supports weak
|
||||
symbols. */
|
||||
BT_STDC /* `__STDC__' */
|
||||
};
|
||||
|
||||
/* There is a slot in the hashnode for use by front ends when integrated
|
||||
|
@ -347,7 +347,7 @@ cb_ident (pfile, str)
|
||||
const cpp_string * str;
|
||||
{
|
||||
maybe_print_line (cpp_get_line (pfile)->output_line);
|
||||
fprintf (print.outf, "#ident \"%.*s\"\n", (int) str->len, str->text);
|
||||
fprintf (print.outf, "#ident \"%s\"\n", str->text);
|
||||
print.lineno++;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user