]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
(make_path): chdir to "//", not "/", if the file name
authorPaul Eggert <eggert@cs.ucla.edu>
Thu, 5 May 2005 07:59:48 +0000 (07:59 +0000)
committerPaul Eggert <eggert@cs.ucla.edu>
Thu, 5 May 2005 07:59:48 +0000 (07:59 +0000)
starts with exactly two slashes.

lib/makepath.c

index 1bc12c31052365935f9ef6ef145dcda2ee414c05..5ae89d239b66ad7536734d8f15f96305eba1677d 100644 (file)
@@ -1,7 +1,7 @@
 /* makepath.c -- Ensure that a directory path exists.
 
-   Copyright (C) 1990, 1997, 1998, 1999, 2000, 2002, 2003, 2004 Free
-   Software Foundation, Inc.
+   Copyright (C) 1990, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005
+   Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -207,8 +207,14 @@ make_path (const char *argpath,
       /* If we've saved the cwd and DIRPATH is an absolute pathname,
         we must chdir to `/' in order to enable the chdir optimization.
          So if chdir ("/") fails, turn off the optimization.  */
-      if (do_chdir && *dirpath == '/' && chdir ("/") < 0)
-       do_chdir = false;
+      if (do_chdir && dirpath[0] == '/')
+       {
+         /* POSIX says "//" might be special, so chdir to "//" if the
+            file name starts with exactly two slashes.  */
+         char const *root = "//" + (dirpath[1] != '/' || dirpath[2] == '/');
+         if (chdir (root) != 0)
+           do_chdir = false;
+       }
 
       slash = dirpath;