]> git.ipfire.org Git - thirdparty/make.git/commitdiff
Fix $abspath on Cygwin when HAVE_DOS_PATHS is in effect.
authorEli Zaretskii <eliz@gnu.org>
Wed, 2 Oct 2013 16:39:53 +0000 (19:39 +0300)
committerEli Zaretskii <eliz@gnu.org>
Wed, 2 Oct 2013 16:39:53 +0000 (19:39 +0300)
 function.c (IS_ABSOLUTE) [__CYGWIN__]: Special definition for Cygwin.
 (abspath) [__CYGWIN__]: Reset root_len to 1 if the absolute file name
 has the Posix /foo/bar form.
 [HAVE_DOS_PATHS]: Use root_len instead of hard-coded 2.

ChangeLog
function.c

index bae4ea3bd24d63f1142e246b17b8f8443eff1fa8..5f7f7ae33f39937f6906bf4c32e6c510d4996fcb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2013-10-02  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix $abspath on Cygwin when HAVE_DOS_PATHS is in effect.
+       * function.c (IS_ABSOLUTE) [__CYGWIN__]: Special definition for
+       Cygwin.
+       (abspath) [__CYGWIN__]: Reset root_len to 1 if the absolute file
+       name has the Posix /foo/bar form.
+       [HAVE_DOS_PATHS]: Use root_len instead of hard-coded 2.
+
 2013-10-01  Paul Smith  <psmith@gnu.org>
 
        * configure.ac: Update version to 3.99.93.
index ce60ef5433d859bb080610e9c1ce9ed057d2558f..1eceabbab3f92db0eabab05228d234d66b7c0f2b 100644 (file)
@@ -1949,8 +1949,12 @@ func_not (char *o, char **argv, char *funcname UNUSED)
 \f
 
 #ifdef HAVE_DOS_PATHS
-#define IS_ABSOLUTE(n) (n[0] && n[1] == ':')
-#define ROOT_LEN 3
+# ifdef __CYGWIN__
+#  define IS_ABSOLUTE(n) ((n[0] && n[1] == ':') || STOP_SET (n[0], MAP_PATHSEP))
+# else
+#  define IS_ABSOLUTE(n) (n[0] && n[1] == ':')
+# endif
+# define ROOT_LEN 3
 #else
 #define IS_ABSOLUTE(n) (n[0] == '/')
 #define ROOT_LEN 1
@@ -2001,13 +2005,17 @@ abspath (const char *name, char *apath)
     }
   else
     {
+#ifdef __CYGWIN__
+      if (STOP_SET (name[0], MAP_PATHSEP))
+       root_len = 1;
+#endif
       strncpy (apath, name, root_len);
       apath[root_len] = '\0';
       dest = apath + root_len;
       /* Get past the root, since we already copied it.  */
       name += root_len;
 #ifdef HAVE_DOS_PATHS
-      if (! STOP_SET (apath[2], MAP_PATHSEP))
+      if (! STOP_SET (apath[root_len - 1], MAP_PATHSEP))
         {
           /* Convert d:foo into d:./foo and increase root_len.  */
           apath[2] = '.';
@@ -2018,7 +2026,7 @@ abspath (const char *name, char *apath)
           name--;
         }
       else
-        apath[2] = '/'; /* make sure it's a forward slash */
+        apath[root_len - 1] = '/'; /* make sure it's a forward slash */
 #endif
     }