Skip to content

Commit 7d092ad

Browse files
dschogitster
authored andcommitted
get_pwd_cwd(): Do not trust st_dev/st_ino blindly
10c4c88 (Allow add_path() to add non-existent directories to the path, 2008-07-21) introduced get_pwd_cwd() function in order to favor $PWD when getenv("PWD") and getcwd() refer to the same directory but are different strings (e.g. the former gives a nicer looking name via a symbolic link to an uglier looking automounted path). The function tried to determine if two directories are the same by running stat(2) on both and comparing ino/dev fields. Unfortunately, stat() does not fill any ino or dev fields in msysgit. But there is a telltale: both ino and dev are 0 when they are not filled correctly, so let's be extra cautious. This happens to fix a bug in "get-receive-pack working_directory/" when the GIT_DIR would not be set correctly due to absolute_path(".") returning the wrong value. Signed-off-by: Johannes Schindelin <[email protected]> Acked-by: Johannes Sixt <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 10c4c88 commit 7d092ad

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

abspath.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,8 @@ static const char *get_pwd_cwd(void)
7777
pwd = getenv("PWD");
7878
if (pwd && strcmp(pwd, cwd)) {
7979
stat(cwd, &cwd_stat);
80-
if (!stat(pwd, &pwd_stat) &&
80+
if ((cwd_stat.st_dev || cwd_stat.st_ino) &&
81+
!stat(pwd, &pwd_stat) &&
8182
pwd_stat.st_dev == cwd_stat.st_dev &&
8283
pwd_stat.st_ino == cwd_stat.st_ino) {
8384
strlcpy(cwd, pwd, PATH_MAX);

0 commit comments

Comments
 (0)