(convert_Path_to_windows32): Fix last change. Fixes Savannah bug #25412.
authorEli Zaretskii <eliz@gnu.org>
Sat, 14 Mar 2009 16:31:57 +0000 (16:31 +0000)
committerEli Zaretskii <eliz@gnu.org>
Sat, 14 Mar 2009 16:31:57 +0000 (16:31 +0000)
ChangeLog
w32/pathstuff.c

index 66934ff..cbdb12c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2009-03-14  Eli Zaretskii  <eliz@gnu.org>
 
+       * w32/pathstuff.c (convert_Path_to_windows32): Fix last change.
+       Fixes Savannah bug #25412.
+
        * w32/subproc/sub_proc.c <top level>: Update Copyright years.  Add
        prototype for xmalloc.
        (find_file): Accept 3 arguments PATH_VAR, FULL_FNAME, and FULL_LEN
index 6f712d1..bb790f0 100644 (file)
@@ -1,6 +1,6 @@
 /* Path conversion for Windows pathnames.
 Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
-2007 Free Software Foundation, Inc.
+2007, 2009 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -49,6 +49,9 @@ convert_Path_to_windows32(char *Path, char to_delim)
     char *p;            /* points to element of old Path */
 
     /* is this a multi-element Path ? */
+    /* FIXME: Perhaps use ":;\"" in strpbrk to convert all quotes to
+       delimiters as well, as a way to handle quoted directories in
+       PATH?  */
     for (p = Path, etok = strpbrk(p, ":;");
          etok;
          etok = strpbrk(p, ":;"))
@@ -74,8 +77,11 @@ convert_Path_to_windows32(char *Path, char to_delim)
             for (p++; *p && *p != '"'; p++) /* skip quoted part */
                 ;
             etok = strpbrk(p, ":;");        /* find next delimiter */
-            *etok = to_delim;
-            p = ++etok;
+            if (etok) {
+                *etok = to_delim;
+                p = ++etok;
+           } else
+                p += strlen(p);
         } else {
             /* found another one, no drive letter */
             *etok = to_delim;