This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/11242] #include <memory> takes my memory directory instead of the standard memory header file
- From: "dannysmith at users dot sourceforge dot net" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 19 May 2004 21:27:46 -0000
- Subject: [Bug c++/11242] #include <memory> takes my memory directory instead of the standard memory header file
- References: <20030618153535.11242.lecroart@nevrax.com>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Additional Comments From dannysmith at users dot sourceforge dot net 2004-05-19 21:27 -------
Hi,
This bug is still present on mingw32 hosts on both 3.4.0 and trunk.
It is caused by the behaviour of open() in cppfiles:open_file(). On mingw32
_any_ attempt to open() a directory fails and sets errno to EACCES, regardless
of permissions. So, rather than continuing the search for a valid header, the
search fails with "Permission denied"
This will fix:
Index: cppfiles.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cppfiles.c,v
retrieving revision 1.209
diff -c -3 -p -r1.209 cppfiles.c
*** cppfiles.c 5 May 2004 18:25:52 -0000 1.209
--- cppfiles.c 19 May 2004 21:18:52 -0000
*************** open_file (_cpp_file *file)
*** 233,238 ****
--- 233,246 ----
else if (errno == ENOTDIR)
errno = ENOENT;
+ /* An attempt to open() a directory may fail and set errno to EACCES.
+ On __MINGW32__ host an attempt to open() _any_ directory will do this.
+ Check and reset errno to ENOENT. */
+ else if (errno == EACCES
+ && stat (file->path, &file->st) == 0
+ && S_ISDIR (file->st.st_mode))
+ errno = ENOENT;
+
file->err_no = errno;
return false;
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11242