From: Anatol Belski Date: Sat, 9 Dec 2017 11:38:19 +0000 (+0100) Subject: Use cheaper ascii conversion for mode X-Git-Tag: php-7.3.0alpha1~843 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=331019c548c271aa857aac1761dd2fac9479d11c;p=php Use cheaper ascii conversion for mode --- diff --git a/win32/ioutil.c b/win32/ioutil.c index c33591354f..3f56a44acb 100644 --- a/win32/ioutil.c +++ b/win32/ioutil.c @@ -669,24 +669,37 @@ PW32IO int php_win32_ioutil_access_w(const wchar_t *path, mode_t mode) PW32IO FILE *php_win32_ioutil_fopen_w(const wchar_t *path, const wchar_t *mode) {/*{{{*/ FILE *ret; + char modea[16] = {0}; +#if 0 char *modea; - int err = 0, fd, flags; +#endif + int err = 0, fd, flags, i = 0; PHP_WIN32_IOUTIL_CHECK_PATH_W(path, NULL, 0) /* Using the converter from streams, char only. */ + while (i < sizeof(modea)-1 && mode[i]) { + modea[i] = (char)mode[i]; + i++; + } +#if 0 modea = php_win32_cp_w_to_any(mode); if (!modea) { err = GetLastError(); SET_ERRNO_FROM_WIN32_CODE(err); return NULL; } +#endif if (SUCCESS != php_stream_parse_fopen_modes(modea, &flags)) { +#if 0 free(modea); +#endif SET_ERRNO_FROM_WIN32_CODE(ERROR_INVALID_PARAMETER); return NULL; } +#if 0 free(modea); +#endif fd = php_win32_ioutil_open_w(path, flags, 0666); if (0 > fd) { diff --git a/win32/ioutil.h b/win32/ioutil.h index f3a72b346e..61d3fcddf4 100644 --- a/win32/ioutil.h +++ b/win32/ioutil.h @@ -373,8 +373,11 @@ __forceinline static int php_win32_ioutil_rmdir(const char *path) __forceinline static FILE *php_win32_ioutil_fopen(const char *patha, const char *modea) {/*{{{*/ FILE *ret; + wchar_t modew[16] = {0}; +#if 0 wchar_t *modew; - int err = 0; +#endif + int err = 0, i = 0; PHP_WIN32_IOUTIL_INIT_W(patha) if (!pathw) { @@ -384,24 +387,34 @@ __forceinline static FILE *php_win32_ioutil_fopen(const char *patha, const char PHP_WIN32_IOUTIL_CHECK_PATH_W(pathw, NULL, 1) + while (i < (sizeof(modew)-1)/sizeof(wchar_t) && modea[i]) { + modew[i] = (wchar_t)modea[i]; + i++; + } +#if 0 modew = php_win32_cp_ascii_to_w(modea); - if (!patha) { + if (!modew) { PHP_WIN32_IOUTIL_CLEANUP_W() SET_ERRNO_FROM_WIN32_CODE(ERROR_INVALID_PARAMETER); return NULL; } +#endif ret = php_win32_ioutil_fopen_w(pathw, modew); if (!ret) { err = GetLastError(); PHP_WIN32_IOUTIL_CLEANUP_W() +#if 0 free(modew); +#endif SET_ERRNO_FROM_WIN32_CODE(err); return NULL; } PHP_WIN32_IOUTIL_CLEANUP_W() +#if 0 free(modew); +#endif return ret; }/*}}}*/