aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator
diff options
context:
space:
mode:
authorBjörn-Egil Dahlberg <[email protected]>2011-09-16 14:39:19 +0200
committerBjörn-Egil Dahlberg <[email protected]>2011-09-16 14:39:19 +0200
commitf7d2fe5e4094cf135b950cc4eeab91adde1ac3f6 (patch)
tree381ca56789e146bc5d642a853d8092c0c3415f2e /erts/emulator
parentf5972a55dc7619b14887d46276918d82b9bcf44d (diff)
parent0c41940bef1d80b6b335cb0a77d5608d9bbe27fd (diff)
downloadotp-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')
-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;