OSDN Git Service

* cppfiles.c (_cpp_execute_include): Don't make a null-terminated
authorneil <neil@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 4 Mar 2001 12:02:02 +0000 (12:02 +0000)
committerneil <neil@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 4 Mar 2001 12:02:02 +0000 (12:02 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@40233 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/cppfiles.c
gcc/cpphash.h
gcc/cppinit.c
gcc/cpplex.c
gcc/cpplib.c
gcc/cpplib.h
gcc/cppmain.c

index 4190054..7a1772b 100644 (file)
@@ -1,9 +1,25 @@
-2001-03-04  Laurynas Biveinis  <lauras@softhome.net>\r
-\r
-       * gcc.c (convert_filename): Append executable suffix\r
-       if NO_AUTO_EXE_SUFFIX is not defined.\r
-       * gcc.texi: Document NO_AUTO_EXE_SUFFIX.\r
-       * config/i386/djgpp.h: Define NO_AUTO_EXE_SUFFIX.\r
+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
+       if NO_AUTO_EXE_SUFFIX is not defined.
+       * gcc.texi: Document NO_AUTO_EXE_SUFFIX.
+       * config/i386/djgpp.h: Define NO_AUTO_EXE_SUFFIX.
 
 2001-03-03  David O'Brien  <obrien@FreeBSD.org>
        
index 72af433..0dfd9d0 100644 (file)
@@ -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)
index 5b2c24b..df27e73 100644 (file)
@@ -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)
index 61f72b4..457d266 100644 (file)
@@ -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
index bd96303..37a0c61 100644 (file)
@@ -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;
+      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)
        {
-         c = EOF;
          unterminated (pfile, terminator);
          break;
        }
-      c = *buffer->cur++;
 
-    have_char:
       /* 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
index 07f8fad..571e204 100644 (file)
@@ -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.  */
index eaa0ff9..c0c3ff3 100644 (file)
@@ -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
index 6d3afe0..ceab9c9 100644 (file)
@@ -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++;
 }