Skip to content

Commit f114690

Browse files
committed
Merge pull request #2449 from dscho/mingw-getcwd-and-symlinks
Do resolve symlinks in `getcwd()`
2 parents 034c8e3 + 81f9b7b commit f114690

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
@@ -1137,18 +1137,16 @@ char *mingw_getcwd(char *pointer, int len)
11371137
{
11381138
wchar_t cwd[MAX_PATH], wpointer[MAX_PATH];
11391139
DWORD ret = GetCurrentDirectoryW(ARRAY_SIZE(cwd), cwd);
1140+
HANDLE hnd;
11401141

11411142
if (!ret || ret >= ARRAY_SIZE(cwd)) {
11421143
errno = ret ? ENAMETOOLONG : err_win_to_posix(GetLastError());
11431144
return NULL;
11441145
}
1145-
ret = GetLongPathNameW(cwd, wpointer, ARRAY_SIZE(wpointer));
1146-
if (!ret && GetLastError() == ERROR_ACCESS_DENIED) {
1147-
HANDLE hnd = CreateFileW(cwd, 0,
1148-
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL,
1149-
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
1150-
if (hnd == INVALID_HANDLE_VALUE)
1151-
return NULL;
1146+
hnd = CreateFileW(cwd, 0,
1147+
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL,
1148+
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
1149+
if (hnd != INVALID_HANDLE_VALUE) {
11521150
ret = GetFinalPathNameByHandleW(hnd, wpointer, ARRAY_SIZE(wpointer), 0);
11531151
CloseHandle(hnd);
11541152
if (!ret || ret >= ARRAY_SIZE(wpointer))
@@ -1157,13 +1155,11 @@ char *mingw_getcwd(char *pointer, int len)
11571155
return NULL;
11581156
return pointer;
11591157
}
1160-
if (!ret || ret >= ARRAY_SIZE(wpointer))
1161-
return NULL;
1162-
if (GetFileAttributesW(wpointer) == INVALID_FILE_ATTRIBUTES) {
1158+
if (GetFileAttributesW(cwd) == INVALID_FILE_ATTRIBUTES) {
11631159
errno = ENOENT;
11641160
return NULL;
11651161
}
1166-
if (xwcstoutf(pointer, wpointer, len) < 0)
1162+
if (xwcstoutf(pointer, cwd, len) < 0)
11671163
return NULL;
11681164
convert_slashes(pointer);
11691165
return pointer;

0 commit comments

Comments
 (0)