From be21d64ca8f36ca14adc881d88212e639d26a3b1 Mon Sep 17 00:00:00 2001 From: vprus Date: Sat, 9 Jun 2007 10:16:52 +0000 Subject: * cppfiles.c (open_file): Account for the fact that on windows, opening a directory gives EACCES. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@125590 138bc75d-0d04-0410-961f-82ee72b054a4 --- libcpp/ChangeLog | 6 ++++++ libcpp/files.c | 13 +++++++++++++ 2 files changed, 19 insertions(+) diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index 712bc32784b..205c1dd9db1 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,9 @@ +2007-06-09 Vladimir Prus + + * cppfiles.c (open_file): Account for the + fact that on windows, opening a directory gives + EACCES. + 2007-06-05 Joerg Wunsch PR preprocessor/23479 diff --git a/libcpp/files.c b/libcpp/files.c index 3751184d02f..b20c38e8d87 100644 --- a/libcpp/files.c +++ b/libcpp/files.c @@ -228,6 +228,19 @@ open_file (_cpp_file *file) close (file->fd); file->fd = -1; } +#if defined(_WIN32) && !defined(__CYGWIN__) + else if (errno == EACCES) + { + /* On most UNIX systems, open succeeds on a directory. Above, + we check if we have opened a directory and if so, set errno + to ENOENT. However, on Windows, opening a directory + fails with EACCESS. We want to return ENOENT in that + case too. */ + if (stat (file->path, &file->st) == 0 + && S_ISDIR (file->st.st_mode)) + errno = ENOENT; + } +#endif else if (errno == ENOTDIR) errno = ENOENT; -- cgit v1.2.1