From 280cc680712a70fc7f1827f57d62e98507e6cbb5 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Thu, 5 May 2005 07:59:48 +0000 Subject: [PATCH] (make_path): chdir to "//", not "/", if the file name starts with exactly two slashes. --- lib/makepath.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/makepath.c b/lib/makepath.c index 1bc12c3105..5ae89d239b 100644 --- a/lib/makepath.c +++ b/lib/makepath.c @@ -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; -- 2.47.3