* path.cc (conv_path_list): Remove enclosing quotes and trailing

backslashes from Win32 environment path lists.
This commit is contained in:
Corinna Vinschen 2011-02-02 09:59:10 +00:00
parent 0e126cb141
commit cecc445d5c
2 changed files with 26 additions and 3 deletions

View 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

View 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)
{