diff options
author | Anatol Belski <ab@php.net> | 2017-10-09 13:13:51 +0200 |
---|---|---|
committer | Anatol Belski <ab@php.net> | 2017-10-09 13:13:51 +0200 |
commit | a51c542b5305dbcb62279db57025ec7f1f1774db (patch) | |
tree | 58ad78ecce683b8e0d2f340ff5e43053a705711b /win32 | |
parent | 1db7e4a962782462e692f705ba6125dedfad87d5 (diff) | |
parent | dc3b9fe619ca36ddb1f1948c66fc09a500dedc2f (diff) | |
download | php-git-a51c542b5305dbcb62279db57025ec7f1f1774db.tar.gz |
Merge branch 'PHP-7.1' into PHP-7.2
* PHP-7.1:
Fix ftok() multibyte path support
Diffstat (limited to 'win32')
-rw-r--r-- | win32/ftok.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/win32/ftok.c b/win32/ftok.c index dd68c2e24e..b88ed009c8 100644 --- a/win32/ftok.c +++ b/win32/ftok.c @@ -21,24 +21,33 @@ #include <windows.h> #include <sys/stat.h> +#include "ioutil.h" PHP_WIN32_IPC_API key_t ftok(const char *pathname, int proj_id) {/*{{{*/ HANDLE fh; - struct stat st; + struct _stat st; BY_HANDLE_FILE_INFORMATION bhfi; key_t ret; + PHP_WIN32_IOUTIL_INIT_W(pathname) - if (stat(pathname, &st) < 0) { + if (!pathw) { return (key_t)-1; } - if ((fh = CreateFile(pathname, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0)) == INVALID_HANDLE_VALUE) { + if (_wstat(pathw, &st) < 0) { + PHP_WIN32_IOUTIL_CLEANUP_W() + return (key_t)-1; + } + + if ((fh = CreateFileW(pathw, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0)) == INVALID_HANDLE_VALUE) { + PHP_WIN32_IOUTIL_CLEANUP_W() return (key_t)-1; } if (!GetFileInformationByHandle(fh, &bhfi)) { + PHP_WIN32_IOUTIL_CLEANUP_W() CloseHandle(fh); return (key_t)-1; } @@ -46,6 +55,7 @@ ftok(const char *pathname, int proj_id) ret = (key_t) ((proj_id & 0xff) << 24 | (st.st_dev & 0xff) << 16 | ((bhfi.nFileIndexLow | (__int64)bhfi.nFileIndexHigh << 32) & 0xffff)); CloseHandle(fh); + PHP_WIN32_IOUTIL_CLEANUP_W() return ret; }/*}}}*/ |