aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2014-03-13 14:30:48 +0100
committerSverker Eriksson <[email protected]>2014-03-13 14:30:48 +0100
commit0e9eb5c6586c927e3407f33951596e22c04a0cfe (patch)
tree4bc89bfaec9b680e3167505e461df70281c61fae /erts/emulator
parenteec90640fb8d122dd713d2c892fa2c365c05aae6 (diff)
downloadotp-0e9eb5c6586c927e3407f33951596e22c04a0cfe.tar.gz
otp-0e9eb5c6586c927e3407f33951596e22c04a0cfe.tar.bz2
otp-0e9eb5c6586c927e3407f33951596e22c04a0cfe.zip
erts: Fix long windows paths for compressed files
Diffstat (limited to 'erts/emulator')
-rw-r--r--erts/emulator/drivers/common/gzio.c3
-rw-r--r--erts/emulator/drivers/win32/win_efile.c12
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. */