OSDN Git Service

* mount.cc (is_unc_share): Allow \\?\ prefix as well. Enhance comment.
authorcorinna <corinna>
Wed, 30 Apr 2008 08:49:23 +0000 (08:49 +0000)
committercorinna <corinna>
Wed, 30 Apr 2008 08:49:23 +0000 (08:49 +0000)
(mount_info::from_fstab): Remove patch from 2008-04-29.

* mount.cc (mount_info::conv_to_posix_path): Simplify test for native
UNC path.
* path.cc (normalize_win32_path): Ditto.
(symlink_worker): Ditto.
(symlink_info::posixify): Ditto.
(cygwin_conv_path): Ditto.

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

index 231664b..f0585d8 100644 (file)
@@ -1,3 +1,15 @@
+2008-04-30  Corinna Vinschen  <corinna@vinschen.de>
+
+       * mount.cc (is_unc_share): Allow \\?\ prefix as well.  Enhance comment.
+       (mount_info::from_fstab): Remove patch from 2008-04-29.
+
+       * mount.cc (mount_info::conv_to_posix_path): Simplify test for native
+       UNC path.
+       * path.cc (normalize_win32_path): Ditto.
+       (symlink_worker): Ditto.
+       (symlink_info::posixify): Ditto.
+       (cygwin_conv_path): Ditto.
+
 2008-04-29  Corinna Vinschen  <corinna@vinschen.de>
 
        * mount.cc (mount_info::from_fstab): Skip native path prefix in
index 5fdef2d..0f13697 100644 (file)
@@ -42,7 +42,10 @@ details. */
 #define isproc(path) \
   (path_prefix_p (proc, (path), proc_len))
 
-/* is_unc_share: Return non-zero if PATH begins with //UNC/SHARE */
+/* is_unc_share: Return non-zero if PATH begins with //server/share 
+                 or with one of the native prefixes //./ or //?/ 
+   This function is only used to test for valid input strings.
+   The later normalization drops the native prefixes. */
 
 static inline bool __stdcall
 is_unc_share (const char *path)
@@ -50,7 +53,7 @@ is_unc_share (const char *path)
   const char *p;
   return (isdirsep (path[0])
         && isdirsep (path[1])
-        && (isalnum (path[2]) || path[2] == '.')
+        && (isalnum (path[2]) || path[2] == '.' || path[2] == '?')
         && ((p = strpbrk (path + 3, "\\/")) != NULL)
         && isalnum (p[1]));
 }
@@ -576,10 +579,9 @@ mount_info::conv_to_posix_path (PWCHAR src_path, char *posix_path,
   if (!wcsncmp (src_path, L"\\\\?\\", 4))
     {
       src_path += 4;
-      if (!wcsncmp (src_path, L"UNC\\", 4))
+      if (src_path[1] != L':') /* native UNC path */
        {
-         src_path += 2;
-         src_path[0] = L'\\';
+         *(src_path += 2) = L'\\';
          changed = true;
        }
     }
@@ -881,12 +883,6 @@ mount_info::from_fstab (bool user)
       debug_printf ("GetModuleFileNameW, %E");
       return false;
     }
-  if (!wcsncmp (path, L"\\\\?\\", 4))
-    {
-      path += 4;
-      if (path[1] != L':')
-        *(path += 2) = L'\\';
-    }
   w = wcsrchr (path, L'\\');
   if (w)
     {
index ef4ebec..01847c7 100644 (file)
@@ -1353,7 +1353,7 @@ normalize_win32_path (const char *src, char *dst, char *&tail)
       && src[2] == '?' && isdirsep (src[3]))
     {
       src += 4;
-      if (ascii_strncasematch (src, "UNC", 3))
+      if (src[1] != ':') /* native UNC path */
         {
          src += 2; /* Fortunately the first char is not copied... */
          beg_src_slash = true;
@@ -1643,10 +1643,9 @@ symlink_worker (const char *oldpath, const char *newpath, bool use_winsym,
                 takes a wide char path name, it does not understand the
                 Win32 prefix for long pathnames!  So we have to tack off
                 the prefix and convert the path to the "normal" syntax
-                for ParseDisplayName.  I have no idea if it's able to take
-                long path names at all since I can't test it right now. */
+                for ParseDisplayName.  */
              WCHAR *wc = wc_path + 4;
-             if (!wcsncmp (wc, L"UNC\\", 4))
+             if (wc[1] != L':') /* native UNC path */
                *(wc += 2) = L'\\';
              HRESULT res;
              if (SUCCEEDED (res = psl->ParseDisplayName (NULL, NULL, wc, NULL,
@@ -2013,11 +2012,8 @@ symlink_info::posixify (char *srcbuf)
   if (srcbuf[0] == '\\' && !strncmp (srcbuf + 1, "??\\", 3))
     {
       srcbuf += 4;
-      if (!strncmp (srcbuf, "UNC\\", 4))
-       {
-         srcbuf += 2;
-         *srcbuf = '\\';
-       }
+      if (srcbuf[1] != ':') /* native UNC path */
+       *(srcbuf += 2) = '\\';
     }
   if (isdrive (srcbuf))
     mount_table->conv_to_posix_path (srcbuf, contents, 0);
@@ -2729,7 +2725,7 @@ cygwin_conv_path (cygwin_conv_path_t what, const void *from, void *to,
       buf = tp.c_get ();
       sys_wcstombs (buf, NT_MAX_PATH, up->Buffer, up->Length / sizeof (WCHAR));
       buf += 4; /* Skip \??\ */
-      if (ascii_strncasematch (buf, "UNC\\", 4))
+      if (buf[1] != ':') /* native UNC path */
        *(buf += 2) = '\\';
       lsiz = strlen (buf) + 1;
       break;