diff options
author | Neil Booth <neil@daikokuya.demon.co.uk> | 2001-05-05 11:12:19 +0000 |
---|---|---|
committer | Neil Booth <neil@gcc.gnu.org> | 2001-05-05 11:12:19 +0000 |
commit | f277b5e03b84f165522aadcaf16a7cfddecfc087 (patch) | |
tree | b9605775a3f8dfa905683c31d3707f15c4cf8aef /gcc/cppfiles.c | |
parent | 5dc6bfd7da13d129648feaffe6b570dd1a4aa917 (diff) | |
download | gcc-f277b5e03b84f165522aadcaf16a7cfddecfc087.zip gcc-f277b5e03b84f165522aadcaf16a7cfddecfc087.tar.gz gcc-f277b5e03b84f165522aadcaf16a7cfddecfc087.tar.bz2 |
cppfiles.c (struct include_file): New member err_no.
* 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
Diffstat (limited to 'gcc/cppfiles.c')
-rw-r--r-- | gcc/cppfiles.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/gcc/cppfiles.c b/gcc/cppfiles.c index e242e92..dea6dd6 100644 --- a/gcc/cppfiles.c +++ b/gcc/cppfiles.c @@ -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; } |