]> sourceware.org Git - newlib-cygwin.git/commitdiff
* path.cc (cwdstuff::set): Revert error handling change in case
authorCorinna Vinschen <corinna@vinschen.de>
Wed, 20 Feb 2008 14:42:29 +0000 (14:42 +0000)
committerCorinna Vinschen <corinna@vinschen.de>
Wed, 20 Feb 2008 14:42:29 +0000 (14:42 +0000)
DuplicateHandle fails, because it breaks Vista/Longhorn workaround.

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

index c310ebb362a7efd95b37cbea195ce74ab21adcbb..3cb2cfda4439427bbf22dfc7a7d97cfacf57afcd 100644 (file)
@@ -1,3 +1,8 @@
+2008-02-20  Corinna Vinschen  <corinna@vinschen.de>
+
+       * path.cc (cwdstuff::set): Revert error handling change in case
+       DuplicateHandle fails, because it breaks Vista/Longhorn workaround.
+
 2008-02-19  Christopher Faylor  <me+cygwin@cgf.cx>
 
        * sigproc.cc (sig_send): Use sigmask of target thread if it is
index b57a2ced8d14a042e749546234ce3b4c27754958..39293602ee7010b03089f45edf3e21c58a2890e0 100644 (file)
@@ -4429,7 +4429,7 @@ cwdstuff::set (PUNICODE_STRING nat_cwd, const char *posix_cwd, bool doit)
         - Unlinking a cwd fails because SetCurrentDirectory seems to
           open directories so that deleting the directory is disallowed.
           The below code opens with *all* sharing flags set. */
-      HANDLE h, h_copy;
+      HANDLE h;
       NTSTATUS status;
       IO_STATUS_BLOCK io;
       OBJECT_ATTRIBUTES attr;
@@ -4454,25 +4454,21 @@ cwdstuff::set (PUNICODE_STRING nat_cwd, const char *posix_cwd, bool doit)
          res = -1;
          goto out;
        }
-      /* Workaround a problem in Vista which fails in subsequent calls to
-        CreateFile with ERROR_INVALID_HANDLE if the handle in
+      /* Workaround a problem in Vista/Longhorn which fails in subsequent
+        calls to CreateFile with ERROR_INVALID_HANDLE if the handle in
         CurrentDirectoryHandle changes without calling SetCurrentDirectory,
         and the filename given to CreateFile is a relative path.  It looks
         like Vista stores a copy of the CWD handle in some other undocumented
         place.  The NtClose/DuplicateHandle reuses the original handle for
         the copy of the new handle and the next CreateFile works.
         Note that this is not thread-safe (yet?) */
-      if (!DuplicateHandle (GetCurrentProcess (), h, GetCurrentProcess (),
-                           &h_copy, 0, TRUE, DUPLICATE_SAME_ACCESS))
-       {
-         RtlReleasePebLock ();
-         __seterrno ();
-         NtClose (h);
-         res = -1;
-         goto out;
-       }
       NtClose (*phdl);
-      dir = *phdl = h;
+      if (DuplicateHandle (GetCurrentProcess (), h, GetCurrentProcess (), phdl,
+                          0, TRUE, DUPLICATE_SAME_ACCESS))
+       NtClose (h);
+      else
+       *phdl = h;
+      dir = *phdl;
 
       /* No need to set path on init. */
       if (nat_cwd
This page took 0.03464 seconds and 5 git commands to generate.