diff options
author | Sverker Eriksson <[email protected]> | 2014-03-13 14:30:48 +0100 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2014-03-13 14:30:48 +0100 |
commit | 0e9eb5c6586c927e3407f33951596e22c04a0cfe (patch) | |
tree | 4bc89bfaec9b680e3167505e461df70281c61fae | |
parent | eec90640fb8d122dd713d2c892fa2c365c05aae6 (diff) | |
download | otp-0e9eb5c6586c927e3407f33951596e22c04a0cfe.tar.gz otp-0e9eb5c6586c927e3407f33951596e22c04a0cfe.tar.bz2 otp-0e9eb5c6586c927e3407f33951596e22c04a0cfe.zip |
erts: Fix long windows paths for compressed files
-rw-r--r-- | erts/emulator/drivers/common/gzio.c | 3 | ||||
-rw-r--r-- | erts/emulator/drivers/win32/win_efile.c | 12 |
2 files changed, 14 insertions, 1 deletions
diff --git a/erts/emulator/drivers/common/gzio.c b/erts/emulator/drivers/common/gzio.c index 653f3954b1..86734452a3 100644 --- a/erts/emulator/drivers/common/gzio.c +++ b/erts/emulator/drivers/common/gzio.c @@ -229,6 +229,7 @@ local ErtsGzFile gz_open (path, mode) errno = 0; #if defined(FILENAMES_16BIT) { + FILE* efile_wfopen(const WCHAR* name, const WCHAR* mode); WCHAR wfmode[80]; int i = 0; int j; @@ -236,7 +237,7 @@ local ErtsGzFile gz_open (path, mode) wfmode[i++] = (WCHAR) fmode[j]; } wfmode[i++] = L'\0'; - s->file = _wfopen((WCHAR *)path, wfmode); + s->file = efile_wfopen((WCHAR *)path, wfmode); if (s->file == NULL) { return s->destroy(s), (ErtsGzFile)Z_NULL; } diff --git a/erts/emulator/drivers/win32/win_efile.c b/erts/emulator/drivers/win32/win_efile.c index d9bc390d13..afb0252724 100644 --- a/erts/emulator/drivers/win32/win_efile.c +++ b/erts/emulator/drivers/win32/win_efile.c @@ -1125,6 +1125,18 @@ int fd; /* File descriptor for file to close. */ CloseHandle((HANDLE) fd); } +FILE* efile_wfopen(const WCHAR* name, const WCHAR* mode) +{ + Efile_call_state state; + Efile_error dummy; + FILE* f; + call_state_init(&state, &dummy); + ensure_wpath(&state, &name); + f = _wfopen(name, mode); + call_state_free(&state); + return f; +} + int efile_fdatasync(errInfo, fd) Efile_error* errInfo; /* Where to return error codes. */ |