aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/drivers/win32
diff options
context:
space:
mode:
authorPatrik Nyblom <[email protected]>2011-04-15 16:24:22 +0200
committerPatrik Nyblom <[email protected]>2011-05-10 08:59:44 +0200
commite7580bdbd1a84f53e78625c26d548025aeb585f0 (patch)
treee4f699c75cdb3550b9f00772f614196519370eaa /erts/emulator/drivers/win32
parente3af9123e7ef9291535cafbd0ecb9d3309d674f7 (diff)
downloadotp-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-xerts/emulator/drivers/win32/win_efile.c6
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;