cppfiles.c (struct include_file): New member err_no.
authorNeil Booth <neil@daikokuya.demon.co.uk>
Sat, 5 May 2001 11:12:19 +0000 (11:12 +0000)
committerNeil Booth <neil@gcc.gnu.org>
Sat, 5 May 2001 11:12:19 +0000 (11:12 +0000)
* cppfiles.c (struct include_file): New member err_no.
(find_or_create_entry): Set it.
(open_file): Don't set fds to -2.  Instead, use err_no to
remember previous errors, if any.

From-SVN: r41865

gcc/ChangeLog
gcc/cppfiles.c

index 2692493a756d603974d10e1fa81ed7fdb9a4052c..06727576cdf4bfd2d7c97c0d68bf703bee339cdf 100644 (file)
@@ -1,3 +1,10 @@
+2001-05-05  Neil Booth  <neil@daikokuya.demon.co.uk>
+
+       * cppfiles.c (struct include_file): New member err_no.
+       (find_or_create_entry): Set it.
+       (open_file): Don't set fds to -2.  Instead, use err_no to
+       remember previous errors, if any.
+
 2001-05-05  Stephane Carrez  <Stephane.Carrez@worldnet.fr>
 
        * config/m68hc11/m68hc11.c (m68hc11_gen_movhi): Optimize moves
index e242e920f22c50b2f5d5ec08c0ffd8d178cc46b3..dea6dd6677e17e704155bea5d59bff364c9f3974 100644 (file)
@@ -67,6 +67,7 @@ struct include_file
   const unsigned char *buffer; /* pointer to cached file contents */
   struct stat st;              /* copy of stat(2) data for file */
   int fd;                      /* fd open on file (short term storage only) */
+  int err_no;                  /* errno obtained if opening a file failed */
   unsigned short include_count;        /* number of times file has been read */
   unsigned short refcnt;       /* number of stacked buffers using this file */
   unsigned char mapped;                /* file buffer is mmapped */
@@ -175,6 +176,7 @@ find_or_create_entry (pfile, fname)
     {
       file = xcnew (struct include_file);
       file->name = name;
+      file->err_no = errno;
       node = splay_tree_insert (pfile->all_include_files,
                                (splay_tree_key) file->name,
                                (splay_tree_value) file);
@@ -210,12 +212,12 @@ open_file (pfile, filename)
   splay_tree_node nd = find_or_create_entry (pfile, filename);
   struct include_file *file = (struct include_file *) nd->value;
 
-  if (errno)
-    file->fd = -2;
-
-  /* Don't retry opening if we failed previously.  */
-  if (file->fd == -2)
-    return 0;
+  if (file->err_no)
+    {
+      /* Ugh.  handle_missing_header () needs errno to be set.  */
+      errno = file->err_no;
+      return 0;
+    }
 
   /* Don't reopen an idempotent file. */
   if (DO_NOT_REREAD (file))
@@ -266,12 +268,10 @@ open_file (pfile, filename)
     }
 
   /* Don't issue an error message if the file doesn't exist.  */
+  file->err_no = errno;
   if (errno != ENOENT && errno != ENOTDIR)
     cpp_error_from_errno (pfile, file->name);
 
-  /* Create a negative node for this path, and return null.  */
-  file->fd = -2;
-
   return 0;
 }