summaryrefslogtreecommitdiff
path: root/win32
diff options
context:
space:
mode:
Diffstat (limited to 'win32')
-rw-r--r--win32/ioutil.c12
-rw-r--r--win32/ioutil.h10
2 files changed, 20 insertions, 2 deletions
diff --git a/win32/ioutil.c b/win32/ioutil.c
index f7db410dd2..ce4fc9b65c 100644
--- a/win32/ioutil.c
+++ b/win32/ioutil.c
@@ -322,13 +322,23 @@ PW32IO int php_win32_ioutil_mkdir_w(const wchar_t *path, mode_t mode)
if (!PHP_WIN32_IOUTIL_IS_LONG_PATHW(tmp, path_len)) {
wchar_t *_tmp = (wchar_t *) malloc((path_len + PHP_WIN32_IOUTIL_LONG_PATH_PREFIX_LENW + 1) * sizeof(wchar_t));
+ wchar_t *src, *dst;
if (!_tmp) {
SET_ERRNO_FROM_WIN32_CODE(ERROR_NOT_ENOUGH_MEMORY);
free(tmp);
return -1;
}
memmove(_tmp, PHP_WIN32_IOUTIL_LONG_PATH_PREFIXW, PHP_WIN32_IOUTIL_LONG_PATH_PREFIX_LENW * sizeof(wchar_t));
- memmove(_tmp+PHP_WIN32_IOUTIL_LONG_PATH_PREFIX_LENW, tmp, path_len * sizeof(wchar_t));
+ src = tmp;
+ dst = _tmp + PHP_WIN32_IOUTIL_LONG_PATH_PREFIX_LENW;
+ while (src < tmp + path_len) {
+ if (*src == PHP_WIN32_IOUTIL_FW_SLASHW) {
+ *dst++ = PHP_WIN32_IOUTIL_DEFAULT_SLASHW;
+ src++;
+ } else {
+ *dst++ = *src++;
+ }
+ }
path_len += PHP_WIN32_IOUTIL_LONG_PATH_PREFIX_LENW;
_tmp[path_len] = L'\0';
free(tmp);
diff --git a/win32/ioutil.h b/win32/ioutil.h
index 34104a3f45..93dea15967 100644
--- a/win32/ioutil.h
+++ b/win32/ioutil.h
@@ -220,8 +220,16 @@ __forceinline static wchar_t *php_win32_ioutil_conv_any_to_w(const char* in, siz
memmove(ret, mb, mb_len * sizeof(wchar_t));
ret[mb_len] = L'\0';
} else {
+ wchar_t *src = mb, *dst = ret + PHP_WIN32_IOUTIL_LONG_PATH_PREFIX_LENW;
memmove(ret, PHP_WIN32_IOUTIL_LONG_PATH_PREFIXW, PHP_WIN32_IOUTIL_LONG_PATH_PREFIX_LENW * sizeof(wchar_t));
- memmove(ret+PHP_WIN32_IOUTIL_LONG_PATH_PREFIX_LENW, mb, mb_len * sizeof(wchar_t));
+ while (src < mb + mb_len) {
+ if (*src == PHP_WIN32_IOUTIL_FW_SLASHW) {
+ *dst++ = PHP_WIN32_IOUTIL_DEFAULT_SLASHW;
+ src++;
+ } else {
+ *dst++ = *src++;
+ }
+ }
ret[mb_len + PHP_WIN32_IOUTIL_LONG_PATH_PREFIX_LENW] = L'\0';
mb_len += PHP_WIN32_IOUTIL_LONG_PATH_PREFIX_LENW;