OSDN Git Service

* path.cc (symlink_info::check): Set fileattr to
authorcorinna <corinna>
Thu, 24 Dec 2009 21:53:43 +0000 (21:53 +0000)
committercorinna <corinna>
Thu, 24 Dec 2009 21:53:43 +0000 (21:53 +0000)
FILE_ATTRIBUTE_DIRECTORY in a certain error condition.  Explain why.

winsup/cygwin/ChangeLog
winsup/cygwin/path.cc

index 26291f0..8a2111b 100644 (file)
@@ -1,3 +1,8 @@
+2009-12-24  Corinna Vinschen  <corinna@vinschen.de>
+
+       * path.cc (symlink_info::check): Set fileattr to
+       FILE_ATTRIBUTE_DIRECTORY in a certain error condition.  Explain why.
+
 2009-12-22  Christopher Faylor  <me+cygwin@cgf.cx>
 
        * select.cc (fhandler_fifo::select_read): Fill in device specific
index bd3463d..559c873 100644 (file)
@@ -2327,7 +2327,12 @@ symlink_info::check (char *path, const suffix_info *suffixes, unsigned opt,
              if (!NT_SUCCESS (status))
                {
                  debug_printf ("%p = NtOpenFile(%S)", status, &dirname);
-                 fileattr = 0;
+                 /* There's a special case if the file is itself the root
+                    of a drive which is not accessible by the current user.
+                    This case is only recognized by the length of the
+                    basename part.  If it's 0, the incoming file is the
+                    root of a drive.  So we at least know it's a directory. */
+                 fileattr = basename.Length ? 0 : FILE_ATTRIBUTE_DIRECTORY;
                }
              else
                {