summaryrefslogtreecommitdiff
path: root/win32
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2019-08-20 16:04:50 +0200
committerChristoph M. Becker <cmbecker69@gmx.de>2019-08-20 16:04:50 +0200
commit773957c36ff793414f3b0caee5a8510cf31547ed (patch)
tree19c5e0a20610f9270268732ba8b178a580e15bb9 /win32
parent4867864caee22f6e7333a295ad8ef5e709594c9c (diff)
parentc03114e55c7b9367fc9be895fe0df01cd1b62cab (diff)
downloadphp-git-773957c36ff793414f3b0caee5a8510cf31547ed.tar.gz
Merge branch 'PHP-7.4'
* PHP-7.4: Fix #78386: fstat mode has unexpected value on PHP 7.4
Diffstat (limited to 'win32')
-rw-r--r--win32/ioutil.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/win32/ioutil.c b/win32/ioutil.c
index 669876da38..f7db410dd2 100644
--- a/win32/ioutil.c
+++ b/win32/ioutil.c
@@ -942,7 +942,20 @@ static int php_win32_ioutil_fstat_int(HANDLE h, php_win32_ioutil_stat_t *buf, co
}
if ((data->dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) == 0) {
- buf->st_mode |= is_dir ? (S_IFDIR|S_IEXEC|(S_IEXEC>>3)|(S_IEXEC>>6)) : S_IFREG;
+ if (is_dir) {
+ buf->st_mode |= (S_IFDIR|S_IEXEC|(S_IEXEC>>3)|(S_IEXEC>>6));
+ } else {
+ switch (GetFileType(h)) {
+ case FILE_TYPE_CHAR:
+ buf->st_mode |= S_IFCHR;
+ break;
+ case FILE_TYPE_PIPE:
+ buf->st_mode |= S_IFIFO;
+ break;
+ default:
+ buf->st_mode |= S_IFREG;
+ }
+ }
buf->st_mode |= (data->dwFileAttributes & FILE_ATTRIBUTE_READONLY) ? (S_IREAD|(S_IREAD>>3)|(S_IREAD>>6)) : (S_IREAD|(S_IREAD>>3)|(S_IREAD>>6)|S_IWRITE|(S_IWRITE>>3)|(S_IWRITE>>6));
}