summaryrefslogtreecommitdiff
path: root/win32
diff options
context:
space:
mode:
authorAnatol Belski <ab@php.net>2017-10-09 13:13:51 +0200
committerAnatol Belski <ab@php.net>2017-10-09 13:13:51 +0200
commita51c542b5305dbcb62279db57025ec7f1f1774db (patch)
tree58ad78ecce683b8e0d2f340ff5e43053a705711b /win32
parent1db7e4a962782462e692f705ba6125dedfad87d5 (diff)
parentdc3b9fe619ca36ddb1f1948c66fc09a500dedc2f (diff)
downloadphp-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.c16
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;
}/*}}}*/