diff options
author | Neil Booth <neil@daikokuya.demon.co.uk> | 2001-10-08 17:54:15 +0000 |
---|---|---|
committer | Neil Booth <neil@gcc.gnu.org> | 2001-10-08 17:54:15 +0000 |
commit | c0bfe993335d1f1ae3235019a4de1c9829efdc90 (patch) | |
tree | f86b7349baa4cd17384b32dbf3756e3d852aa6bc /gcc/cppfiles.c | |
parent | d5d1b9e2d10970fdb018ff0aeddf1b04b9c27f38 (diff) | |
download | gcc-c0bfe993335d1f1ae3235019a4de1c9829efdc90.zip gcc-c0bfe993335d1f1ae3235019a4de1c9829efdc90.tar.gz gcc-c0bfe993335d1f1ae3235019a4de1c9829efdc90.tar.bz2 |
cppfiles.c (open_file): Don't mark zero-length files never-reread here.
* cppfiles.c (open_file): Don't mark zero-length files
never-reread here. Don't output diagnostics here either.
(stack_include_file): Mark them never-reread here.
(_cpp_read_file): Update.
From-SVN: r46084
Diffstat (limited to 'gcc/cppfiles.c')
-rw-r--r-- | gcc/cppfiles.c | 40 |
1 files changed, 15 insertions, 25 deletions
diff --git a/gcc/cppfiles.c b/gcc/cppfiles.c index 5b8f907..ebefd95 100644 --- a/gcc/cppfiles.c +++ b/gcc/cppfiles.c @@ -248,30 +248,15 @@ open_file (pfile, filename) if (file->fd != -1 && fstat (file->fd, &file->st) == 0) { + if (!S_ISDIR (file->st.st_mode)) + return file; /* If it's a directory, we return null and continue the search as the file we're looking for may appear elsewhere in the search path. */ - if (S_ISDIR (file->st.st_mode)) - errno = ENOENT; - else - { - /* Mark a regular, zero-length file never-reread now. */ - if (S_ISREG (file->st.st_mode) && file->st.st_size == 0) - { - _cpp_never_reread (file); - close (file->fd); - file->fd = -1; - } - - return file; - } + errno = ENOENT; } - /* 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); - return 0; } @@ -302,9 +287,14 @@ stack_include_file (pfile, inc) /* Not in cache? */ if (! inc->buffer) { - /* If an error occurs, do not try to read this file again. */ - if (read_include_file (pfile, inc)) + /* Mark a regular, zero-length file never-reread. Zero-length + files are stacked the first time, so preprocessing a main + file of zero length does not raise an error. */ + if (S_ISREG (inc->st.st_mode) && inc->st.st_size == 0) + _cpp_never_reread (inc); + else if (read_include_file (pfile, inc)) { + /* If an error occurs, do not try to read this file again. */ _cpp_never_reread (inc); return false; } @@ -710,14 +700,14 @@ _cpp_read_file (pfile, fname) const char *fname; { struct include_file *f = open_file (pfile, fname); - bool stacked = false; if (f == NULL) - cpp_error_from_errno (pfile, fname); - else - stacked = stack_include_file (pfile, f); + { + cpp_error_from_errno (pfile, fname); + return false; + } - return stacked; + return stack_include_file (pfile, f); } /* Do appropriate cleanup when a file buffer is popped off the input |