X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Frealpath.c;h=08d32d7bf23f96af6d74dca2e304cc5d36812570;hb=1a223d8b9452c8ac5d0d110aa35c0de0a25e3fae;hp=b39257d0ada28183db43d96900ed6753a757de55;hpb=c8aa261a7bf3eb1389d2e018be1d715f73cacd66;p=chise%2Fxemacs-chise.git- diff --git a/src/realpath.c b/src/realpath.c index b39257d..08d32d7 100644 --- a/src/realpath.c +++ b/src/realpath.c @@ -28,13 +28,14 @@ Boston, MA 02111-1307, USA. */ #include #include #include +#include + #ifdef HAVE_UNISTD_H #include #endif -#ifdef _POSIX_VERSION -#include /* for PATH_MAX */ -#else -#include /* for MAXPATHLEN */ + +#if defined (HAVE_SYS_PARAM_H) +#include #endif #ifdef WINDOWSNT @@ -74,7 +75,7 @@ xrealpath (const char *path, char resolved_path []) #endif /* Make a copy of the source path since we may need to modify it. */ - strcpy(copy_path, path); + strcpy (copy_path, path); path = copy_path; max_path = copy_path + PATH_MAX - 2; #ifdef WINDOWSNT @@ -153,21 +154,20 @@ xrealpath (const char *path, char resolved_path []) continue; } - if (path[1] == '.') + /* Handle ".." */ + if (path[1] == '.' && + (path[2] == '\0' || path[2] == '/')) { - if (path[2] == '\0' || path[2] == '/') - { - path += 2; - - /* Ignore ".." at root. */ - if (new_path == resolved_path + 1) - continue; - - /* Handle ".." by backing up. */ - while ((--new_path)[-1] != '/') - ; - continue; - } + path += 2; + + /* Ignore ".." at root. */ + if (new_path == resolved_path + 1) + continue; + + /* Handle ".." by backing up. */ + while ((--new_path)[-1] != '/') + ; + continue; } } @@ -185,7 +185,7 @@ xrealpath (const char *path, char resolved_path []) #ifdef S_IFLNK /* See if latest pathname component is a symlink. */ *new_path = '\0'; - n = readlink(resolved_path, link_path, PATH_MAX - 1); + n = readlink (resolved_path, link_path, PATH_MAX - 1); if (n < 0) {