OSDN Git Service

* path.cc (cygwin_conv_path): Add band-aid including comment to avoid
authorcorinna <corinna>
Tue, 22 Dec 2009 01:44:37 +0000 (01:44 +0000)
committercorinna <corinna>
Tue, 22 Dec 2009 01:44:37 +0000 (01:44 +0000)
conversion from POSIX "." to Win32 ".\\".

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

index 77bc861..385115a 100644 (file)
@@ -1,5 +1,10 @@
 2009-12-21  Corinna Vinschen  <corinna@vinschen.de>
 
+       * path.cc (cygwin_conv_path): Add band-aid including comment to avoid
+       conversion from POSIX "." to Win32 ".\\".
+
+2009-12-21  Corinna Vinschen  <corinna@vinschen.de>
+
        * exec.cc (execvp): Call find_exec with FE_NNF flag to enforce
        a NULL return when executable isn't found in $PATH.  Convert NULL
        to "".
index 6238f2b..bd3463d 100644 (file)
@@ -2709,6 +2709,16 @@ cygwin_conv_path (cygwin_conv_path_t what, const void *from, void *to,
              *(buf += 2) = '\\';
          }
        lsiz = strlen (buf) + 1;
+       /* TODO: Incoming "." is a special case which leads to a trailing
+          backslash ".\\" in the Win32 path.  That's a result of the
+          conversion in normalize_posix_path.  This should not occur
+          so the below code is just a band-aid. */
+       if (!strcmp ((const char *) from, ".") && relative
+           && !strcmp (buf, ".\\"))
+         {
+           --lsiz;
+           buf[lsiz - 1] = '\0';
+         }
       }
       break;
     case CCP_POSIX_TO_WIN_W:
@@ -2727,7 +2737,16 @@ cygwin_conv_path (cygwin_conv_path_t what, const void *from, void *to,
          if (p.error)
            return_with_errno (p.error);
        }
-      lsiz = (p.get_wide_win32_path_len () + 1) * sizeof (WCHAR);
+      lsiz = p.get_wide_win32_path_len () + 1;
+      /* TODO: Same ".\\" band-aid as in CCP_POSIX_TO_WIN_A case. */
+      if (!strcmp ((const char *) from, ".") && relative
+         && !wcscmp (p.get_nt_native_path ()->Buffer, L".\\"))
+       {
+         --lsiz;
+         p.get_nt_native_path ()->Length -= sizeof (WCHAR);
+         p.get_nt_native_path ()->Buffer[lsiz - 1] = L'\0';
+       }
+      lsiz *= sizeof (WCHAR);
       break;
     case CCP_WIN_A_TO_POSIX:
       buf = tp.c_get ();