From cecc445d5c099e4785dd3da444458b6838325209 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Wed, 2 Feb 2011 09:59:10 +0000 Subject: [PATCH] * path.cc (conv_path_list): Remove enclosing quotes and trailing backslashes from Win32 environment path lists. --- winsup/cygwin/ChangeLog | 5 +++++ winsup/cygwin/path.cc | 24 +++++++++++++++++++++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 72ea9ad7b..376618d2f 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +2011-02-02 Corinna Vinschen + + * path.cc (conv_path_list): Remove enclosing quotes and trailing + backslashes from Win32 environment path lists. + 2011-02-01 Christian Franke * fhandler.cc (fhandler_base::fsync): Ignore ERROR_INVALID_FUNCTION diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc index cb38a25f1..e4075410f 100644 --- a/winsup/cygwin/path.cc +++ b/winsup/cygwin/path.cc @@ -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) {