OSDN Git Service

* path.cc (cwdstuff::set): Only fix up UNC path in win32 so as not
authorcorinna <corinna>
Wed, 15 Jul 2009 13:27:34 +0000 (13:27 +0000)
committercorinna <corinna>
Wed, 15 Jul 2009 13:27:34 +0000 (13:27 +0000)
to overwrite incoming path.

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

index 9883f3b..8f477c8 100644 (file)
@@ -1,3 +1,8 @@
+2009-07-15  Corinna Vinschen  <corinna@vinschen.de>
+
+       * path.cc (cwdstuff::set): Only fix up UNC path in win32 so as not
+       to overwrite incoming path.
+
 2009-07-14  Corinna Vinschen  <corinna@vinschen.de>
 
        Throughout avoid having to initialize constant UNICODE_STRINGs.
index b8be19f..20d7503 100644 (file)
@@ -3195,6 +3195,8 @@ cwdstuff::set (PUNICODE_STRING nat_cwd, const char *posix_cwd, bool doit)
        }
       else
        {
+         bool unc = false;
+
          if (upath.Buffer[0] == L'/') /* Virtual path, don't mangle. */
            ;
          else if (!doit)
@@ -3202,7 +3204,7 @@ cwdstuff::set (PUNICODE_STRING nat_cwd, const char *posix_cwd, bool doit)
              /* Convert to a Win32 path. */
              upath.Buffer += upath.Length / sizeof (WCHAR) - len;
              if (upath.Buffer[1] == L'\\') /* UNC path */
-               upath.Buffer[0] = L'\\';
+               unc = true;
              upath.Length = len * sizeof (WCHAR);
            }
          else
@@ -3218,6 +3220,8 @@ cwdstuff::set (PUNICODE_STRING nat_cwd, const char *posix_cwd, bool doit)
                                                              upath.Length + 2),
                                     upath.Length + 2);
          RtlCopyUnicodeString (&win32, &upath);
+         if (unc)
+           win32.Buffer[0] = L'\\';
        }
       /* Make sure it's NUL-terminated. */
       win32.Buffer[win32.Length / sizeof (WCHAR)] = L'\0';