@@ -1243,18 +1243,16 @@ char *mingw_getcwd(char *pointer, int len)
12431243{
12441244 wchar_t cwd [MAX_PATH ], wpointer [MAX_PATH ];
12451245 DWORD ret = GetCurrentDirectoryW (ARRAY_SIZE (cwd ), cwd );
1246+ HANDLE hnd ;
12461247
12471248 if (!ret || ret >= ARRAY_SIZE (cwd )) {
12481249 errno = ret ? ENAMETOOLONG : err_win_to_posix (GetLastError ());
12491250 return NULL ;
12501251 }
1251- ret = GetLongPathNameW (cwd , wpointer , ARRAY_SIZE (wpointer ));
1252- if (!ret && GetLastError () == ERROR_ACCESS_DENIED ) {
1253- HANDLE hnd = CreateFileW (cwd , 0 ,
1254- FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE , NULL ,
1255- OPEN_EXISTING , FILE_FLAG_BACKUP_SEMANTICS , NULL );
1256- if (hnd == INVALID_HANDLE_VALUE )
1257- return NULL ;
1252+ hnd = CreateFileW (cwd , 0 ,
1253+ FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE , NULL ,
1254+ OPEN_EXISTING , FILE_FLAG_BACKUP_SEMANTICS , NULL );
1255+ if (hnd != INVALID_HANDLE_VALUE ) {
12581256 ret = GetFinalPathNameByHandleW (hnd , wpointer , ARRAY_SIZE (wpointer ), 0 );
12591257 CloseHandle (hnd );
12601258 if (!ret || ret >= ARRAY_SIZE (wpointer ))
@@ -1263,13 +1261,11 @@ char *mingw_getcwd(char *pointer, int len)
12631261 return NULL ;
12641262 return pointer ;
12651263 }
1266- if (!ret || ret >= ARRAY_SIZE (wpointer ))
1267- return NULL ;
1268- if (GetFileAttributesW (wpointer ) == INVALID_FILE_ATTRIBUTES ) {
1264+ if (GetFileAttributesW (cwd ) == INVALID_FILE_ATTRIBUTES ) {
12691265 errno = ENOENT ;
12701266 return NULL ;
12711267 }
1272- if (xwcstoutf (pointer , wpointer , len ) < 0 )
1268+ if (xwcstoutf (pointer , cwd , len ) < 0 )
12731269 return NULL ;
12741270 convert_slashes (pointer );
12751271 return pointer ;
0 commit comments