diff options
author | Björn-Egil Dahlberg <[email protected]> | 2011-09-16 14:39:19 +0200 |
---|---|---|
committer | Björn-Egil Dahlberg <[email protected]> | 2011-09-16 14:39:19 +0200 |
commit | f7d2fe5e4094cf135b950cc4eeab91adde1ac3f6 (patch) | |
tree | 381ca56789e146bc5d642a853d8092c0c3415f2e /erts/emulator/drivers | |
parent | f5972a55dc7619b14887d46276918d82b9bcf44d (diff) | |
parent | 0c41940bef1d80b6b335cb0a77d5608d9bbe27fd (diff) | |
download | otp-f7d2fe5e4094cf135b950cc4eeab91adde1ac3f6.tar.gz otp-f7d2fe5e4094cf135b950cc4eeab91adde1ac3f6.tar.bz2 otp-f7d2fe5e4094cf135b950cc4eeab91adde1ac3f6.zip |
Merge branch 'dev' into major
* dev:
Add error code for cyclic symbolic links and make directory links readable
Diffstat (limited to 'erts/emulator/drivers')
-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; |