OSDN Git Service

* path.cc (get_nt_native_path): Drop considerations for DOS devices.
authorcorinna <corinna>
Wed, 11 Jun 2008 14:06:04 +0000 (14:06 +0000)
committercorinna <corinna>
Wed, 11 Jun 2008 14:06:04 +0000 (14:06 +0000)
Keep relative paths relative.
(cygwin_conv_path): Don't try to skip native NT prefixes on relative
paths.

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

index f9d0510..a68b4fb 100644 (file)
@@ -1,5 +1,12 @@
 2008-06-11  Corinna Vinschen  <corinna@vinschen.de>
 
+       * path.cc (get_nt_native_path): Drop considerations for DOS devices.
+       Keep relative paths relative.
+       (cygwin_conv_path): Don't try to skip native NT prefixes on relative
+       paths.
+
+2008-06-11  Corinna Vinschen  <corinna@vinschen.de>
+
        * include/cygwin/version.h (CYGWIN_VERSION_MOUNT_REGISTRY): Bump.
        (CYGWIN_INFO_CYGWIN_MOUNT_REGISTRY_NAME): Remove.
        (CYGWIN_INFO_CYGDRIVE_FLAGS): Remove.
index eeb4b84..0eeee8c 100644 (file)
@@ -626,9 +626,10 @@ get_nt_native_path (const char *path, UNICODE_STRING& upath, bool managed)
   upath.Length = 0;
   if (path[0] == '/')          /* special path w/o NT path representation. */
     str2uni_cat (upath, path);
-  else if (path[0] != '\\')    /* X:\...  or NUL, etc. */
+  else if (path[0] != '\\')    /* X:\...  or relative path. */
     {
-      str2uni_cat (upath, "\\??\\");
+      if (path[1] == ':')      /* X:\... */
+       str2uni_cat (upath, "\\??\\");
       str2uni_cat (upath, path);
       transform_chars (&upath, 7, managed);
     }
@@ -2832,9 +2833,13 @@ cygwin_conv_path (cygwin_conv_path_t what, const void *from, void *to,
       PUNICODE_STRING up = p.get_nt_native_path ();
       buf = tp.c_get ();
       sys_wcstombs (buf, NT_MAX_PATH, up->Buffer, up->Length / sizeof (WCHAR));
-      buf += 4; /* Skip \??\ */
-      if (buf[1] != ':') /* native UNC path */
-       *(buf += 2) = '\\';
+      /* Convert native path to standard DOS path. */
+      if (!strncmp (buf, "\\??\\", 4))
+        {
+         buf += 4;
+         if (buf[1] != ':') /* native UNC path */
+           *(buf += 2) = '\\';
+       }
       lsiz = strlen (buf) + 1;
       break;
     case CCP_POSIX_TO_WIN_W: