]> sourceware.org Git - newlib-cygwin.git/commitdiff
* path.cc (symlink_info::check): Drop PC_KEEP_HANDLE flag for
authorCorinna Vinschen <corinna@vinschen.de>
Fri, 12 Apr 2013 08:30:47 +0000 (08:30 +0000)
committerCorinna Vinschen <corinna@vinschen.de>
Fri, 12 Apr 2013 08:30:47 +0000 (08:30 +0000)
unrecognized reparse points as well.  Reorganize code and comments
handling reparse points for better readability.

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

index b6b81eb030e0b4c4dda4529323d62750da1d9fe9..b2a08f42075a88b308c07272be6dd425db23cdee 100644 (file)
@@ -1,3 +1,9 @@
+2013-04-12  Corinna Vinschen  <corinna@vinschen.de>
+
+       * path.cc (symlink_info::check): Drop PC_KEEP_HANDLE flag for
+       unrecognized reparse points as well.  Reorganize code and comments
+       handling reparse points for better readability.
+
 2013-04-11  Corinna Vinschen  <corinna@vinschen.de>
 
        * hires.h (hires_ns::nsecs): Declare with bool parameter.
index 4d3161922dccd3637553c0336b6b8ab085ae5647..cfda6bb27df3f6568e46173e12c154de6b304131 100644 (file)
@@ -2653,26 +2653,28 @@ restart:
       if ((fileattr & FILE_ATTRIBUTE_REPARSE_POINT))
        {
          res = check_reparse_point (h, fs.is_remote_drive ());
-         if (res == -1)
+         if (res > 0)
            {
-             /* Volume mount point.  The filesystem information for the top
+             /* A symlink is never a directory. */
+             conv_hdl.fnoi ()->FileAttributes &= ~FILE_ATTRIBUTE_DIRECTORY;
+             break;
+           }
+         else
+           {
+             /* Volume moint point or unrecognized reparse point type.
+                Make sure the open handle is not used in later stat calls.
+                The handle has been opened with the FILE_OPEN_REPARSE_POINT
+                flag, so it's a handle to the reparse point, not a handle
+                to the volumes root dir. */
+             pflags &= ~PC_KEEP_HANDLE;
+             /* Volume mount point:  The filesystem information for the top
                 level directory should be for the volume top level directory,
                 rather than for the reparse point itself.  So we fetch the
                 filesystem information again, but with a NULL handle.
                 This does what we want because fs_info::update opens the
                 handle without FILE_OPEN_REPARSE_POINT. */
-             fs.update (&upath, NULL);
-             /* Make sure the open handle is not used in later stat calls.
-                The handle has been opened with the FILE_OPEN_REPARSE_POINT
-                flag, so it's a handle to the reparse point, not a handle
-                to the volumes root dir. */
-             pflags &= ~PC_KEEP_HANDLE;
-           }
-         else if (res)
-           {
-             /* A symlink is never a directory. */
-             conv_hdl.fnoi ()->FileAttributes &= ~FILE_ATTRIBUTE_DIRECTORY;
-             break;
+             if (res == -1)
+               fs.update (&upath, NULL);
            }
        }
 
This page took 0.038243 seconds and 5 git commands to generate.