From f8786092ad753e75021db36a5a4daeca7f2b77e7 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Wed, 2 Oct 2013 19:39:53 +0300 Subject: 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. --- ChangeLog | 9 +++++++++ function.c | 16 ++++++++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index bae4ea3..5f7f7ae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2013-10-02 Eli Zaretskii + + 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 * configure.ac: Update version to 3.99.93. diff --git a/function.c b/function.c index ce60ef5..1eceabb 100644 --- a/function.c +++ b/function.c @@ -1949,8 +1949,12 @@ func_not (char *o, char **argv, char *funcname UNUSED) #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 } -- cgit v1.2.3