summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/path.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/path.cc')
-rw-r--r--winsup/cygwin/path.cc11
1 files changed, 8 insertions, 3 deletions
diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc
index 41ea4d4ec..f724a47e6 100644
--- a/winsup/cygwin/path.cc
+++ b/winsup/cygwin/path.cc
@@ -1234,17 +1234,22 @@ conv_path_list (const char *src, char *dst, int to_posix_p)
int (*conv_fn) (const char *, char *) = (to_posix_p
? cygwin_conv_to_posix_path
: cygwin_conv_to_win32_path);
+ char srcbuf[MAX_PATH];
+ int len;
do
{
s = strchr (src, src_delim);
if (s)
{
- *s = 0;
- (*conv_fn) (src[0] != 0 ? src : ".", d);
+ len = s - src;
+ if (len >= MAX_PATH)
+ len = MAX_PATH - 1;
+ memcpy (srcbuf, src, len);
+ srcbuf[len] = 0;
+ (*conv_fn) (len ? srcbuf : ".", d);
d += strlen (d);
*d++ = dst_delim;
- *s = src_delim;
src = s + 1;
}
else