diff options
author | Patrik Nyblom <[email protected]> | 2011-04-15 16:24:22 +0200 |
---|---|---|
committer | Patrik Nyblom <[email protected]> | 2011-05-10 08:59:44 +0200 |
commit | e7580bdbd1a84f53e78625c26d548025aeb585f0 (patch) | |
tree | e4f699c75cdb3550b9f00772f614196519370eaa /erts/emulator/drivers/win32 | |
parent | e3af9123e7ef9291535cafbd0ecb9d3309d674f7 (diff) | |
download | otp-e7580bdbd1a84f53e78625c26d548025aeb585f0.tar.gz otp-e7580bdbd1a84f53e78625c26d548025aeb585f0.tar.bz2 otp-e7580bdbd1a84f53e78625c26d548025aeb585f0.zip |
Add error code for cyclic symbolic links and make directory links readable
Diffstat (limited to 'erts/emulator/drivers/win32')
-rwxr-xr-x | erts/emulator/drivers/win32/win_efile.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/erts/emulator/drivers/win32/win_efile.c b/erts/emulator/drivers/win32/win_efile.c index 3d59564f7b..931bb196f1 100755 --- a/erts/emulator/drivers/win32/win_efile.c +++ b/erts/emulator/drivers/win32/win_efile.c @@ -127,6 +127,8 @@ static int errno_map(DWORD last_error) { return EBUSY; case ERROR_NO_PROC_SLOTS: return EAGAIN; + case ERROR_CANT_RESOLVE_FILENAME: + return EMLINK; case ERROR_ARENA_TRASHED: case ERROR_INVALID_BLOCK: case ERROR_BAD_ENVIRONMENT: @@ -1405,7 +1407,7 @@ efile_readlink(Efile_error* errInfo, char* name, char* buffer, size_t size) DWORD fileAttributes = GetFileAttributesW(wname); if ((fileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)) { BOOLEAN success = 0; - HANDLE h = CreateFileW(wname, GENERIC_READ, 0,NULL, OPEN_EXISTING, 0, NULL); + HANDLE h = CreateFileW(wname, GENERIC_READ, 0,NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); int len; if(h != INVALID_HANDLE_VALUE) { success = pGetFinalPathNameByHandle(h, wbuffer, size,0); @@ -1421,7 +1423,7 @@ efile_readlink(Efile_error* errInfo, char* name, char* buffer, size_t size) if (*wbuffer == L'\\') *wbuffer = L'/'; CloseHandle(h); - } + } FreeLibrary(hModule); if (success) { return 1; |