Skip to content

Commit 6a828c7

Browse files
committed
Merge pull request #2449 from dscho/mingw-getcwd-and-symlinks
Do resolve symlinks in `getcwd()`
2 parents c9172d4 + ce16057 commit 6a828c7

File tree

1 file changed

+7
-11
lines changed

1 file changed

+7
-11
lines changed

compat/mingw.c

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1218,18 +1218,16 @@ char *mingw_getcwd(char *pointer, int len)
12181218
{
12191219
wchar_t cwd[MAX_PATH], wpointer[MAX_PATH];
12201220
DWORD ret = GetCurrentDirectoryW(ARRAY_SIZE(cwd), cwd);
1221+
HANDLE hnd;
12211222

12221223
if (!ret || ret >= ARRAY_SIZE(cwd)) {
12231224
errno = ret ? ENAMETOOLONG : err_win_to_posix(GetLastError());
12241225
return NULL;
12251226
}
1226-
ret = GetLongPathNameW(cwd, wpointer, ARRAY_SIZE(wpointer));
1227-
if (!ret && GetLastError() == ERROR_ACCESS_DENIED) {
1228-
HANDLE hnd = CreateFileW(cwd, 0,
1229-
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL,
1230-
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
1231-
if (hnd == INVALID_HANDLE_VALUE)
1232-
return NULL;
1227+
hnd = CreateFileW(cwd, 0,
1228+
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL,
1229+
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
1230+
if (hnd != INVALID_HANDLE_VALUE) {
12331231
ret = GetFinalPathNameByHandleW(hnd, wpointer, ARRAY_SIZE(wpointer), 0);
12341232
CloseHandle(hnd);
12351233
if (!ret || ret >= ARRAY_SIZE(wpointer))
@@ -1238,13 +1236,11 @@ char *mingw_getcwd(char *pointer, int len)
12381236
return NULL;
12391237
return pointer;
12401238
}
1241-
if (!ret || ret >= ARRAY_SIZE(wpointer))
1242-
return NULL;
1243-
if (GetFileAttributesW(wpointer) == INVALID_FILE_ATTRIBUTES) {
1239+
if (GetFileAttributesW(cwd) == INVALID_FILE_ATTRIBUTES) {
12441240
errno = ENOENT;
12451241
return NULL;
12461242
}
1247-
if (xwcstoutf(pointer, wpointer, len) < 0)
1243+
if (xwcstoutf(pointer, cwd, len) < 0)
12481244
return NULL;
12491245
convert_slashes(pointer);
12501246
return pointer;

0 commit comments

Comments
 (0)