Skip to content

Commit 3633600

Browse files
dschoGit for Windows Build Agent
authored and
Git for Windows Build Agent
committed
Merge pull request #2449 from dscho/mingw-getcwd-and-symlinks
Do resolve symlinks in `getcwd()`
2 parents 37f88ac + 6fdec05 commit 3633600

File tree

1 file changed

+6
-10
lines changed

1 file changed

+6
-10
lines changed

compat/mingw.c

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1070,18 +1070,16 @@ char *mingw_getcwd(char *pointer, int len)
10701070
{
10711071
wchar_t cwd[MAX_PATH], wpointer[MAX_PATH];
10721072
DWORD ret = GetCurrentDirectoryW(ARRAY_SIZE(cwd), cwd);
1073+
HANDLE hnd;
10731074

10741075
if (!ret || ret >= ARRAY_SIZE(cwd)) {
10751076
errno = ret ? ENAMETOOLONG : err_win_to_posix(GetLastError());
10761077
return NULL;
10771078
}
1078-
ret = GetLongPathNameW(cwd, wpointer, ARRAY_SIZE(wpointer));
1079-
if (!ret && GetLastError() == ERROR_ACCESS_DENIED) {
1080-
HANDLE hnd = CreateFileW(cwd, 0,
1081-
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL,
1082-
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
1083-
if (hnd == INVALID_HANDLE_VALUE)
1084-
return NULL;
1079+
hnd = CreateFileW(cwd, 0,
1080+
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL,
1081+
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
1082+
if (hnd != INVALID_HANDLE_VALUE) {
10851083
ret = GetFinalPathNameByHandleW(hnd, wpointer, ARRAY_SIZE(wpointer), 0);
10861084
CloseHandle(hnd);
10871085
if (!ret || ret >= ARRAY_SIZE(wpointer))
@@ -1090,9 +1088,7 @@ char *mingw_getcwd(char *pointer, int len)
10901088
return NULL;
10911089
return pointer;
10921090
}
1093-
if (!ret || ret >= ARRAY_SIZE(wpointer))
1094-
return NULL;
1095-
if (xwcstoutf(pointer, wpointer, len) < 0)
1091+
if (xwcstoutf(pointer, cwd, len) < 0)
10961092
return NULL;
10971093
convert_slashes(pointer);
10981094
return pointer;

0 commit comments

Comments
 (0)