OSDN Git Service

* path.cc (conv_path_list): Remove enclosing quotes and trailing
authorcorinna <corinna>
Wed, 2 Feb 2011 18:59:09 +0000 (18:59 +0000)
committercorinna <corinna>
Wed, 2 Feb 2011 18:59:09 +0000 (18:59 +0000)
backslashes from Win32 environment path lists.

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

index 72ea9ad..376618d 100644 (file)
@@ -1,3 +1,8 @@
+2011-02-02  Corinna Vinschen  <corinna@vinschen.de>
+
+       * path.cc (conv_path_list): Remove enclosing quotes and trailing
+       backslashes from Win32 environment path lists.
+
 2011-02-01  Christian Franke  <franke@computer.org>
 
        * fhandler.cc (fhandler_base::fsync): Ignore ERROR_INVALID_FUNCTION
index cb38a25..e407541 100644 (file)
@@ -1351,17 +1351,35 @@ conv_path_list (const char *src, char *dst, size_t size, int to_posix)
   bool saw_empty = false;
   do
     {
-      char *s = strccpy (srcbuf, &src, src_delim);
-      size_t len = s - srcbuf;
+      char *srcpath = srcbuf;
+      char *s = strccpy (srcpath, &src, src_delim);
+      size_t len = s - srcpath;
       if (len >= NT_MAX_PATH)
        {
          err = ENAMETOOLONG;
          break;
        }
+      /* Paths in Win32 path lists in the environment (%Path%), are often
+        enclosed in quotes (usually paths with spaces).  Trailing backslashes
+        are common, too.  Remove them. */
+      if (to_posix == ENV_CVT && len)
+       {
+         if (*srcpath == '"')
+           {
+             ++srcpath;
+             *--s = '\0';
+             len -= 2;
+           }
+         while (len && s[-1] == '\\')
+           {
+             *--s = '\0';
+             --len;
+           }
+       }
       if (len)
        {
          ++d;
-         err = cygwin_conv_path (conv_fn, srcbuf, d, size - (d - dst));
+         err = cygwin_conv_path (conv_fn, srcpath, d, size - (d - dst));
        }
       else if (!to_posix)
        {