From 57e9597c1ef9811b27ae94c3eed5ea1b8b2a4f7f Mon Sep 17 00:00:00 2001 From: haszi Date: Fri, 2 Feb 2024 21:26:41 +0100 Subject: [PATCH 1/7] Move some dir constants to stub file --- ext/standard/dir.c | 39 +++++++++---------------- ext/standard/dir.stub.php | 58 ++++++++++++++++++++++++++++++++++++++ ext/standard/dir_arginfo.h | 27 +++++++++++++++++- 3 files changed, 97 insertions(+), 27 deletions(-) diff --git a/ext/standard/dir.c b/ext/standard/dir.c index 863ce00588a72..3734421680b2c 100644 --- a/ext/standard/dir.c +++ b/ext/standard/dir.c @@ -23,7 +23,6 @@ #include "php_string.h" #include "php_scandir.h" #include "basic_functions.h" -#include "dir_arginfo.h" #ifdef HAVE_UNISTD_H #include @@ -44,6 +43,8 @@ #endif #endif +#include "dir_arginfo.h" + typedef struct { zend_resource *default_dir; } php_dir_globals; @@ -117,6 +118,8 @@ PHP_MINIT_FUNCTION(dir) { static char dirsep_str[2], pathsep_str[2]; + register_dir_symbols(module_number); + dir_class_entry_ptr = register_class_Directory(); #ifdef ZTS @@ -131,46 +134,30 @@ PHP_MINIT_FUNCTION(dir) pathsep_str[1] = '\0'; REGISTER_STRING_CONSTANT("PATH_SEPARATOR", pathsep_str, CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("SCANDIR_SORT_ASCENDING", PHP_SCANDIR_SORT_ASCENDING, CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("SCANDIR_SORT_DESCENDING", PHP_SCANDIR_SORT_DESCENDING, CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("SCANDIR_SORT_NONE", PHP_SCANDIR_SORT_NONE, CONST_PERSISTENT); - #ifdef HAVE_GLOB -#ifdef GLOB_BRACE - REGISTER_LONG_CONSTANT("GLOB_BRACE", GLOB_BRACE, CONST_PERSISTENT); -#else +#ifndef GLOB_BRACE # define GLOB_BRACE 0 #endif -#ifdef GLOB_MARK - REGISTER_LONG_CONSTANT("GLOB_MARK", GLOB_MARK, CONST_PERSISTENT); -#else -# define GLOB_MARK 0 +#ifndef GLOB_ERR +# define GLOB_ERR 0 #endif -#ifdef GLOB_NOSORT - REGISTER_LONG_CONSTANT("GLOB_NOSORT", GLOB_NOSORT, CONST_PERSISTENT); -#else -# define GLOB_NOSORT 0 +#ifndef GLOB_MARK +# define GLOB_MARK 0 #endif -#ifdef GLOB_NOCHECK - REGISTER_LONG_CONSTANT("GLOB_NOCHECK", GLOB_NOCHECK, CONST_PERSISTENT); -#else +#ifndef GLOB_NOCHECK # define GLOB_NOCHECK 0 #endif -#ifdef GLOB_NOESCAPE - REGISTER_LONG_CONSTANT("GLOB_NOESCAPE", GLOB_NOESCAPE, CONST_PERSISTENT); -#else +#ifndef GLOB_NOESCAPE # define GLOB_NOESCAPE 0 #endif -#ifdef GLOB_ERR - REGISTER_LONG_CONSTANT("GLOB_ERR", GLOB_ERR, CONST_PERSISTENT); -#else -# define GLOB_ERR 0 +#ifndef GLOB_NOSORT +# define GLOB_NOSORT 0 #endif #ifndef GLOB_ONLYDIR diff --git a/ext/standard/dir.stub.php b/ext/standard/dir.stub.php index 2c2ca05a66ff3..cd6e1c3679731 100755 --- a/ext/standard/dir.stub.php +++ b/ext/standard/dir.stub.php @@ -2,6 +2,64 @@ /** @generate-class-entries */ +#if (defined(HAVE_GLOB) && defined(GLOB_BRACE)) +/** + * @var int + * @cvalue GLOB_BRACE + */ +const GLOB_BRACE = UNKNOWN; +#endif +#if (defined(HAVE_GLOB) && defined(GLOB_ERR)) +/** + * @var int + * @cvalue GLOB_ERR + */ +const GLOB_ERR = UNKNOWN; +#endif +#if (defined(HAVE_GLOB) && defined(GLOB_MARK)) +/** + * @var int + * @cvalue GLOB_MARK + */ +const GLOB_MARK = UNKNOWN; +#endif +#if (defined(HAVE_GLOB) && defined(GLOB_NOCHECK)) +/** + * @var int + * @cvalue GLOB_NOCHECK + */ +const GLOB_NOCHECK = UNKNOWN; +#endif +#if (defined(HAVE_GLOB) && defined(GLOB_NOESCAPE)) +/** + * @var int + * @cvalue GLOB_NOESCAPE + */ +const GLOB_NOESCAPE = UNKNOWN; +#endif +#if (defined(HAVE_GLOB) && defined(GLOB_NOSORT)) +/** + * @var int + * @cvalue GLOB_NOSORT + */ +const GLOB_NOSORT = UNKNOWN; +#endif +/** + * @var int + * @cvalue PHP_SCANDIR_SORT_ASCENDING + */ +const SCANDIR_SORT_ASCENDING = UNKNOWN; +/** + * @var int + * @cvalue PHP_SCANDIR_SORT_DESCENDING + */ +const SCANDIR_SORT_DESCENDING = UNKNOWN; +/** + * @var int + * @cvalue PHP_SCANDIR_SORT_NONE + */ +const SCANDIR_SORT_NONE = UNKNOWN; + class Directory { public readonly string $path; diff --git a/ext/standard/dir_arginfo.h b/ext/standard/dir_arginfo.h index f46d0b2484e5a..60d8e989766c8 100644 --- a/ext/standard/dir_arginfo.h +++ b/ext/standard/dir_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: b3890e798e609e306027b4717ce0c5e782884087 */ + * Stub hash: 5792bd58c595d77cbea19d844db98a05c05a54cc */ ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_Directory_close, 0, 0, IS_VOID, 0) ZEND_END_ARG_INFO() @@ -22,6 +22,31 @@ static const zend_function_entry class_Directory_methods[] = { ZEND_FE_END }; +static void register_dir_symbols(int module_number) +{ +#if (defined(HAVE_GLOB) && defined(GLOB_BRACE)) + REGISTER_LONG_CONSTANT("GLOB_BRACE", GLOB_BRACE, CONST_PERSISTENT); +#endif +#if (defined(HAVE_GLOB) && defined(GLOB_ERR)) + REGISTER_LONG_CONSTANT("GLOB_ERR", GLOB_ERR, CONST_PERSISTENT); +#endif +#if (defined(HAVE_GLOB) && defined(GLOB_MARK)) + REGISTER_LONG_CONSTANT("GLOB_MARK", GLOB_MARK, CONST_PERSISTENT); +#endif +#if (defined(HAVE_GLOB) && defined(GLOB_NOCHECK)) + REGISTER_LONG_CONSTANT("GLOB_NOCHECK", GLOB_NOCHECK, CONST_PERSISTENT); +#endif +#if (defined(HAVE_GLOB) && defined(GLOB_NOESCAPE)) + REGISTER_LONG_CONSTANT("GLOB_NOESCAPE", GLOB_NOESCAPE, CONST_PERSISTENT); +#endif +#if (defined(HAVE_GLOB) && defined(GLOB_NOSORT)) + REGISTER_LONG_CONSTANT("GLOB_NOSORT", GLOB_NOSORT, CONST_PERSISTENT); +#endif + REGISTER_LONG_CONSTANT("SCANDIR_SORT_ASCENDING", PHP_SCANDIR_SORT_ASCENDING, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SCANDIR_SORT_DESCENDING", PHP_SCANDIR_SORT_DESCENDING, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SCANDIR_SORT_NONE", PHP_SCANDIR_SORT_NONE, CONST_PERSISTENT); +} + static zend_class_entry *register_class_Directory(void) { zend_class_entry ce, *class_entry; From 0c9ed92a56d0c3e64b9d6f743506122de4628f7e Mon Sep 17 00:00:00 2001 From: haszi Date: Tue, 6 Feb 2024 14:28:22 +0100 Subject: [PATCH 2/7] Move macro definitions to php_dir.h and two more constant registrations into the stub file --- ext/standard/dir.c | 54 +------------------------------------- ext/standard/dir.stub.php | 28 +++++++++++++++----- ext/standard/dir_arginfo.h | 20 +++++++++----- ext/standard/php_dir.h | 53 ++++++++++++++++++++++++++++++++++--- 4 files changed, 86 insertions(+), 69 deletions(-) diff --git a/ext/standard/dir.c b/ext/standard/dir.c index 3734421680b2c..81a7b7b0785d9 100644 --- a/ext/standard/dir.c +++ b/ext/standard/dir.c @@ -23,6 +23,7 @@ #include "php_string.h" #include "php_scandir.h" #include "basic_functions.h" +#include "dir_arginfo.h" #ifdef HAVE_UNISTD_H #include @@ -34,17 +35,6 @@ #include "win32/readdir.h" #endif - -#ifdef HAVE_GLOB -#ifndef PHP_WIN32 -#include -#else -#include "win32/glob.h" -#endif -#endif - -#include "dir_arginfo.h" - typedef struct { zend_resource *default_dir; } php_dir_globals; @@ -134,48 +124,6 @@ PHP_MINIT_FUNCTION(dir) pathsep_str[1] = '\0'; REGISTER_STRING_CONSTANT("PATH_SEPARATOR", pathsep_str, CONST_PERSISTENT); -#ifdef HAVE_GLOB - -#ifndef GLOB_BRACE -# define GLOB_BRACE 0 -#endif - -#ifndef GLOB_ERR -# define GLOB_ERR 0 -#endif - -#ifndef GLOB_MARK -# define GLOB_MARK 0 -#endif - -#ifndef GLOB_NOCHECK -# define GLOB_NOCHECK 0 -#endif - -#ifndef GLOB_NOESCAPE -# define GLOB_NOESCAPE 0 -#endif - -#ifndef GLOB_NOSORT -# define GLOB_NOSORT 0 -#endif - -#ifndef GLOB_ONLYDIR -# define GLOB_ONLYDIR (1<<30) -# define GLOB_EMULATE_ONLYDIR -# define GLOB_FLAGMASK (~GLOB_ONLYDIR) -#else -# define GLOB_FLAGMASK (~0) -#endif - -/* This is used for checking validity of passed flags (passing invalid flags causes segfault in glob()!! */ -#define GLOB_AVAILABLE_FLAGS (0 | GLOB_BRACE | GLOB_MARK | GLOB_NOSORT | GLOB_NOCHECK | GLOB_NOESCAPE | GLOB_ERR | GLOB_ONLYDIR) - - REGISTER_LONG_CONSTANT("GLOB_ONLYDIR", GLOB_ONLYDIR, CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("GLOB_AVAILABLE_FLAGS", GLOB_AVAILABLE_FLAGS, CONST_PERSISTENT); - -#endif /* HAVE_GLOB */ - return SUCCESS; } /* }}} */ diff --git a/ext/standard/dir.stub.php b/ext/standard/dir.stub.php index cd6e1c3679731..620db727fa349 100755 --- a/ext/standard/dir.stub.php +++ b/ext/standard/dir.stub.php @@ -2,48 +2,64 @@ /** @generate-class-entries */ -#if (defined(HAVE_GLOB) && defined(GLOB_BRACE)) +#ifdef HAVE_GLOB +#ifdef GLOB_BRACE /** * @var int * @cvalue GLOB_BRACE */ const GLOB_BRACE = UNKNOWN; #endif -#if (defined(HAVE_GLOB) && defined(GLOB_ERR)) +#ifdef GLOB_ERR /** * @var int * @cvalue GLOB_ERR */ const GLOB_ERR = UNKNOWN; #endif -#if (defined(HAVE_GLOB) && defined(GLOB_MARK)) +#ifdef GLOB_MARK /** * @var int * @cvalue GLOB_MARK */ const GLOB_MARK = UNKNOWN; #endif -#if (defined(HAVE_GLOB) && defined(GLOB_NOCHECK)) +#ifdef GLOB_NOCHECK /** * @var int * @cvalue GLOB_NOCHECK */ const GLOB_NOCHECK = UNKNOWN; #endif -#if (defined(HAVE_GLOB) && defined(GLOB_NOESCAPE)) +#ifdef GLOB_NOESCAPE /** * @var int * @cvalue GLOB_NOESCAPE */ const GLOB_NOESCAPE = UNKNOWN; #endif -#if (defined(HAVE_GLOB) && defined(GLOB_NOSORT)) +#ifdef GLOB_NOSORT /** * @var int * @cvalue GLOB_NOSORT */ const GLOB_NOSORT = UNKNOWN; #endif +#ifdef GLOB_ONLYDIR +/** + * @var int + * @cvalue GLOB_ONLYDIR + */ +const GLOB_ONLYDIR = UNKNOWN; +#endif +#ifdef GLOB_AVAILABLE_FLAGS +/** + * @var int + * @cvalue GLOB_AVAILABLE_FLAGS + */ +const GLOB_AVAILABLE_FLAGS = UNKNOWN; +#endif +#endif /** * @var int * @cvalue PHP_SCANDIR_SORT_ASCENDING diff --git a/ext/standard/dir_arginfo.h b/ext/standard/dir_arginfo.h index 60d8e989766c8..b63a373772fca 100644 --- a/ext/standard/dir_arginfo.h +++ b/ext/standard/dir_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 5792bd58c595d77cbea19d844db98a05c05a54cc */ + * Stub hash: dc1de6900c939831bb0c108926cc2636056d18f2 */ ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_Directory_close, 0, 0, IS_VOID, 0) ZEND_END_ARG_INFO() @@ -24,23 +24,29 @@ static const zend_function_entry class_Directory_methods[] = { static void register_dir_symbols(int module_number) { -#if (defined(HAVE_GLOB) && defined(GLOB_BRACE)) +#if defined(HAVE_GLOB) && defined(GLOB_BRACE) REGISTER_LONG_CONSTANT("GLOB_BRACE", GLOB_BRACE, CONST_PERSISTENT); #endif -#if (defined(HAVE_GLOB) && defined(GLOB_ERR)) +#if defined(HAVE_GLOB) && defined(GLOB_ERR) REGISTER_LONG_CONSTANT("GLOB_ERR", GLOB_ERR, CONST_PERSISTENT); #endif -#if (defined(HAVE_GLOB) && defined(GLOB_MARK)) +#if defined(HAVE_GLOB) && defined(GLOB_MARK) REGISTER_LONG_CONSTANT("GLOB_MARK", GLOB_MARK, CONST_PERSISTENT); #endif -#if (defined(HAVE_GLOB) && defined(GLOB_NOCHECK)) +#if defined(HAVE_GLOB) && defined(GLOB_NOCHECK) REGISTER_LONG_CONSTANT("GLOB_NOCHECK", GLOB_NOCHECK, CONST_PERSISTENT); #endif -#if (defined(HAVE_GLOB) && defined(GLOB_NOESCAPE)) +#if defined(HAVE_GLOB) && defined(GLOB_NOESCAPE) REGISTER_LONG_CONSTANT("GLOB_NOESCAPE", GLOB_NOESCAPE, CONST_PERSISTENT); #endif -#if (defined(HAVE_GLOB) && defined(GLOB_NOSORT)) +#if defined(HAVE_GLOB) && defined(GLOB_NOSORT) REGISTER_LONG_CONSTANT("GLOB_NOSORT", GLOB_NOSORT, CONST_PERSISTENT); +#endif +#if defined(HAVE_GLOB) && defined(GLOB_ONLYDIR) + REGISTER_LONG_CONSTANT("GLOB_ONLYDIR", GLOB_ONLYDIR, CONST_PERSISTENT); +#endif +#if defined(HAVE_GLOB) && defined(GLOB_AVAILABLE_FLAGS) + REGISTER_LONG_CONSTANT("GLOB_AVAILABLE_FLAGS", GLOB_AVAILABLE_FLAGS, CONST_PERSISTENT); #endif REGISTER_LONG_CONSTANT("SCANDIR_SORT_ASCENDING", PHP_SCANDIR_SORT_ASCENDING, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("SCANDIR_SORT_DESCENDING", PHP_SCANDIR_SORT_DESCENDING, CONST_PERSISTENT); diff --git a/ext/standard/php_dir.h b/ext/standard/php_dir.h index 1307d1ecafdbd..05cf06314b696 100644 --- a/ext/standard/php_dir.h +++ b/ext/standard/php_dir.h @@ -17,12 +17,59 @@ #ifndef PHP_DIR_H #define PHP_DIR_H -/* directory functions */ -PHP_MINIT_FUNCTION(dir); -PHP_RINIT_FUNCTION(dir); +#ifdef HAVE_GLOB +#ifndef PHP_WIN32 +#include +#else +#include "win32/glob.h" +#endif +#endif + +#ifdef HAVE_GLOB + +#ifndef GLOB_BRACE +# define GLOB_BRACE 0 +#endif + +#ifndef GLOB_ERR +# define GLOB_ERR 0 +#endif + +#ifndef GLOB_MARK +# define GLOB_MARK 0 +#endif + +#ifndef GLOB_NOCHECK +# define GLOB_NOCHECK 0 +#endif + +#ifndef GLOB_NOESCAPE +# define GLOB_NOESCAPE 0 +#endif + +#ifndef GLOB_NOSORT +# define GLOB_NOSORT 0 +#endif + +#ifndef GLOB_ONLYDIR +# define GLOB_ONLYDIR (1<<30) +# define GLOB_EMULATE_ONLYDIR +# define GLOB_FLAGMASK (~GLOB_ONLYDIR) +#else +# define GLOB_FLAGMASK (~0) +#endif + +/* This is used for checking validity of passed flags (passing invalid flags causes segfault in glob()!! */ +#define GLOB_AVAILABLE_FLAGS (0 | GLOB_BRACE | GLOB_MARK | GLOB_NOSORT | GLOB_NOCHECK | GLOB_NOESCAPE | GLOB_ERR | GLOB_ONLYDIR) + +#endif /* HAVE_GLOB */ #define PHP_SCANDIR_SORT_ASCENDING 0 #define PHP_SCANDIR_SORT_DESCENDING 1 #define PHP_SCANDIR_SORT_NONE 2 +/* directory functions */ +PHP_MINIT_FUNCTION(dir); +PHP_RINIT_FUNCTION(dir); + #endif /* PHP_DIR_H */ From 7cbe1f1a9a5aafd2c9731e1e336e69ace148d144 Mon Sep 17 00:00:00 2001 From: haszi Date: Fri, 9 Feb 2024 22:00:50 +0100 Subject: [PATCH 3/7] Register some constants only if their values are not zero --- ext/standard/dir.stub.php | 12 ++++++------ ext/standard/dir_arginfo.h | 14 +++++++------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/ext/standard/dir.stub.php b/ext/standard/dir.stub.php index 620db727fa349..e54e0856d2c30 100755 --- a/ext/standard/dir.stub.php +++ b/ext/standard/dir.stub.php @@ -3,42 +3,42 @@ /** @generate-class-entries */ #ifdef HAVE_GLOB -#ifdef GLOB_BRACE +#if defined(GLOB_BRACE) && GLOB_BRACE != 0 /** * @var int * @cvalue GLOB_BRACE */ const GLOB_BRACE = UNKNOWN; #endif -#ifdef GLOB_ERR +#if defined(GLOB_ERR) && GLOB_ERR != 0 /** * @var int * @cvalue GLOB_ERR */ const GLOB_ERR = UNKNOWN; #endif -#ifdef GLOB_MARK +#if defined(GLOB_MARK) && GLOB_MARK != 0 /** * @var int * @cvalue GLOB_MARK */ const GLOB_MARK = UNKNOWN; #endif -#ifdef GLOB_NOCHECK +#if defined(GLOB_NOCHECK) && GLOB_NOCHECK != 0 /** * @var int * @cvalue GLOB_NOCHECK */ const GLOB_NOCHECK = UNKNOWN; #endif -#ifdef GLOB_NOESCAPE +#if defined(GLOB_NOESCAPE) && GLOB_NOESCAPE != 0 /** * @var int * @cvalue GLOB_NOESCAPE */ const GLOB_NOESCAPE = UNKNOWN; #endif -#ifdef GLOB_NOSORT +#if defined(GLOB_NOSORT) && GLOB_NOSORT != 0 /** * @var int * @cvalue GLOB_NOSORT diff --git a/ext/standard/dir_arginfo.h b/ext/standard/dir_arginfo.h index b63a373772fca..91b330c522560 100644 --- a/ext/standard/dir_arginfo.h +++ b/ext/standard/dir_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: dc1de6900c939831bb0c108926cc2636056d18f2 */ + * Stub hash: 83959aa1b002c95b79e97c10bf8368b505848ff4 */ ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_Directory_close, 0, 0, IS_VOID, 0) ZEND_END_ARG_INFO() @@ -24,22 +24,22 @@ static const zend_function_entry class_Directory_methods[] = { static void register_dir_symbols(int module_number) { -#if defined(HAVE_GLOB) && defined(GLOB_BRACE) +#if defined(HAVE_GLOB) && defined(GLOB_BRACE) && GLOB_BRACE != 0 REGISTER_LONG_CONSTANT("GLOB_BRACE", GLOB_BRACE, CONST_PERSISTENT); #endif -#if defined(HAVE_GLOB) && defined(GLOB_ERR) +#if defined(HAVE_GLOB) && defined(GLOB_ERR) && GLOB_ERR != 0 REGISTER_LONG_CONSTANT("GLOB_ERR", GLOB_ERR, CONST_PERSISTENT); #endif -#if defined(HAVE_GLOB) && defined(GLOB_MARK) +#if defined(HAVE_GLOB) && defined(GLOB_MARK) && GLOB_MARK != 0 REGISTER_LONG_CONSTANT("GLOB_MARK", GLOB_MARK, CONST_PERSISTENT); #endif -#if defined(HAVE_GLOB) && defined(GLOB_NOCHECK) +#if defined(HAVE_GLOB) && defined(GLOB_NOCHECK) && GLOB_NOCHECK != 0 REGISTER_LONG_CONSTANT("GLOB_NOCHECK", GLOB_NOCHECK, CONST_PERSISTENT); #endif -#if defined(HAVE_GLOB) && defined(GLOB_NOESCAPE) +#if defined(HAVE_GLOB) && defined(GLOB_NOESCAPE) && GLOB_NOESCAPE != 0 REGISTER_LONG_CONSTANT("GLOB_NOESCAPE", GLOB_NOESCAPE, CONST_PERSISTENT); #endif -#if defined(HAVE_GLOB) && defined(GLOB_NOSORT) +#if defined(HAVE_GLOB) && defined(GLOB_NOSORT) && GLOB_NOSORT != 0 REGISTER_LONG_CONSTANT("GLOB_NOSORT", GLOB_NOSORT, CONST_PERSISTENT); #endif #if defined(HAVE_GLOB) && defined(GLOB_ONLYDIR) From 69677b617c0361399a8c36a6a258ef7be79a3bcb Mon Sep 17 00:00:00 2001 From: haszi Date: Fri, 9 Feb 2024 22:41:55 +0100 Subject: [PATCH 4/7] Add internal dir header file --- ext/standard/dir.c | 1 + ext/standard/php_dir.h | 47 --------------------------- ext/standard/php_dir_int.h | 65 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 66 insertions(+), 47 deletions(-) create mode 100644 ext/standard/php_dir_int.h diff --git a/ext/standard/dir.c b/ext/standard/dir.c index 81a7b7b0785d9..7426a7360eee1 100644 --- a/ext/standard/dir.c +++ b/ext/standard/dir.c @@ -20,6 +20,7 @@ #include "fopen_wrappers.h" #include "file.h" #include "php_dir.h" +#include "php_dir_int.h" #include "php_string.h" #include "php_scandir.h" #include "basic_functions.h" diff --git a/ext/standard/php_dir.h b/ext/standard/php_dir.h index 05cf06314b696..b6fbd6dde2c0a 100644 --- a/ext/standard/php_dir.h +++ b/ext/standard/php_dir.h @@ -17,53 +17,6 @@ #ifndef PHP_DIR_H #define PHP_DIR_H -#ifdef HAVE_GLOB -#ifndef PHP_WIN32 -#include -#else -#include "win32/glob.h" -#endif -#endif - -#ifdef HAVE_GLOB - -#ifndef GLOB_BRACE -# define GLOB_BRACE 0 -#endif - -#ifndef GLOB_ERR -# define GLOB_ERR 0 -#endif - -#ifndef GLOB_MARK -# define GLOB_MARK 0 -#endif - -#ifndef GLOB_NOCHECK -# define GLOB_NOCHECK 0 -#endif - -#ifndef GLOB_NOESCAPE -# define GLOB_NOESCAPE 0 -#endif - -#ifndef GLOB_NOSORT -# define GLOB_NOSORT 0 -#endif - -#ifndef GLOB_ONLYDIR -# define GLOB_ONLYDIR (1<<30) -# define GLOB_EMULATE_ONLYDIR -# define GLOB_FLAGMASK (~GLOB_ONLYDIR) -#else -# define GLOB_FLAGMASK (~0) -#endif - -/* This is used for checking validity of passed flags (passing invalid flags causes segfault in glob()!! */ -#define GLOB_AVAILABLE_FLAGS (0 | GLOB_BRACE | GLOB_MARK | GLOB_NOSORT | GLOB_NOCHECK | GLOB_NOESCAPE | GLOB_ERR | GLOB_ONLYDIR) - -#endif /* HAVE_GLOB */ - #define PHP_SCANDIR_SORT_ASCENDING 0 #define PHP_SCANDIR_SORT_DESCENDING 1 #define PHP_SCANDIR_SORT_NONE 2 diff --git a/ext/standard/php_dir_int.h b/ext/standard/php_dir_int.h new file mode 100644 index 0000000000000..df9a9078ee4a3 --- /dev/null +++ b/ext/standard/php_dir_int.h @@ -0,0 +1,65 @@ +/* + +----------------------------------------------------------------------+ + | Copyright (c) The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | https://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + */ + +#ifndef PHP_DIR_INT_H +#define PHP_DIR_INT_H + +#ifdef HAVE_GLOB +#ifndef PHP_WIN32 +#include +#else +#include "win32/glob.h" +#endif +#endif + +#ifdef HAVE_GLOB + +#ifndef GLOB_BRACE +#define GLOB_BRACE 0 +#endif + +#ifndef GLOB_ERR +#define GLOB_ERR 0 +#endif + +#ifndef GLOB_MARK +#define GLOB_MARK 0 +#endif + +#ifndef GLOB_NOCHECK +#define GLOB_NOCHECK 0 +#endif + +#ifndef GLOB_NOESCAPE +#define GLOB_NOESCAPE 0 +#endif + +#ifndef GLOB_NOSORT +#define GLOB_NOSORT 0 +#endif + +#ifndef GLOB_ONLYDIR +#define GLOB_ONLYDIR (1<<30) +#define GLOB_EMULATE_ONLYDIR +#define GLOB_FLAGMASK (~GLOB_ONLYDIR) +#else +#define GLOB_FLAGMASK (~0) +#endif + +/* This is used for checking validity of passed flags (passing invalid flags causes segfault in glob()!! */ +#define GLOB_AVAILABLE_FLAGS (0 | GLOB_BRACE | GLOB_MARK | GLOB_NOSORT | GLOB_NOCHECK | GLOB_NOESCAPE | GLOB_ERR | GLOB_ONLYDIR) + +#endif /* HAVE_GLOB */ + +#endif /* PHP_DIR_INT_H */ From cdfdffe3b4c8e75a4a3ebea39e91eaf543a1b41a Mon Sep 17 00:00:00 2001 From: haszi Date: Mon, 12 Feb 2024 09:41:22 +0100 Subject: [PATCH 5/7] Undo changes to php_dir.h --- ext/standard/php_dir.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ext/standard/php_dir.h b/ext/standard/php_dir.h index b6fbd6dde2c0a..1307d1ecafdbd 100644 --- a/ext/standard/php_dir.h +++ b/ext/standard/php_dir.h @@ -17,12 +17,12 @@ #ifndef PHP_DIR_H #define PHP_DIR_H -#define PHP_SCANDIR_SORT_ASCENDING 0 -#define PHP_SCANDIR_SORT_DESCENDING 1 -#define PHP_SCANDIR_SORT_NONE 2 - /* directory functions */ PHP_MINIT_FUNCTION(dir); PHP_RINIT_FUNCTION(dir); +#define PHP_SCANDIR_SORT_ASCENDING 0 +#define PHP_SCANDIR_SORT_DESCENDING 1 +#define PHP_SCANDIR_SORT_NONE 2 + #endif /* PHP_DIR_H */ From f8bc95eeaa84db2ddb2c0ce4ae108f15e9463042 Mon Sep 17 00:00:00 2001 From: haszi Date: Mon, 12 Feb 2024 09:43:14 +0100 Subject: [PATCH 6/7] Add parentheses around conditions --- ext/standard/dir.stub.php | 12 ++++++------ ext/standard/dir_arginfo.h | 14 +++++++------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/ext/standard/dir.stub.php b/ext/standard/dir.stub.php index e54e0856d2c30..356549c9a94f0 100755 --- a/ext/standard/dir.stub.php +++ b/ext/standard/dir.stub.php @@ -3,42 +3,42 @@ /** @generate-class-entries */ #ifdef HAVE_GLOB -#if defined(GLOB_BRACE) && GLOB_BRACE != 0 +#if defined(GLOB_BRACE) && (GLOB_BRACE != 0) /** * @var int * @cvalue GLOB_BRACE */ const GLOB_BRACE = UNKNOWN; #endif -#if defined(GLOB_ERR) && GLOB_ERR != 0 +#if defined(GLOB_ERR) && (GLOB_ERR != 0) /** * @var int * @cvalue GLOB_ERR */ const GLOB_ERR = UNKNOWN; #endif -#if defined(GLOB_MARK) && GLOB_MARK != 0 +#if defined(GLOB_MARK) && (GLOB_MARK != 0) /** * @var int * @cvalue GLOB_MARK */ const GLOB_MARK = UNKNOWN; #endif -#if defined(GLOB_NOCHECK) && GLOB_NOCHECK != 0 +#if defined(GLOB_NOCHECK) && (GLOB_NOCHECK != 0) /** * @var int * @cvalue GLOB_NOCHECK */ const GLOB_NOCHECK = UNKNOWN; #endif -#if defined(GLOB_NOESCAPE) && GLOB_NOESCAPE != 0 +#if defined(GLOB_NOESCAPE) && (GLOB_NOESCAPE != 0) /** * @var int * @cvalue GLOB_NOESCAPE */ const GLOB_NOESCAPE = UNKNOWN; #endif -#if defined(GLOB_NOSORT) && GLOB_NOSORT != 0 +#if defined(GLOB_NOSORT) && (GLOB_NOSORT != 0) /** * @var int * @cvalue GLOB_NOSORT diff --git a/ext/standard/dir_arginfo.h b/ext/standard/dir_arginfo.h index 91b330c522560..ae502117759f4 100644 --- a/ext/standard/dir_arginfo.h +++ b/ext/standard/dir_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 83959aa1b002c95b79e97c10bf8368b505848ff4 */ + * Stub hash: 614659d3db7010c8408da704ef40a65879ae6d26 */ ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_Directory_close, 0, 0, IS_VOID, 0) ZEND_END_ARG_INFO() @@ -24,22 +24,22 @@ static const zend_function_entry class_Directory_methods[] = { static void register_dir_symbols(int module_number) { -#if defined(HAVE_GLOB) && defined(GLOB_BRACE) && GLOB_BRACE != 0 +#if defined(HAVE_GLOB) && defined(GLOB_BRACE) && (GLOB_BRACE != 0) REGISTER_LONG_CONSTANT("GLOB_BRACE", GLOB_BRACE, CONST_PERSISTENT); #endif -#if defined(HAVE_GLOB) && defined(GLOB_ERR) && GLOB_ERR != 0 +#if defined(HAVE_GLOB) && defined(GLOB_ERR) && (GLOB_ERR != 0) REGISTER_LONG_CONSTANT("GLOB_ERR", GLOB_ERR, CONST_PERSISTENT); #endif -#if defined(HAVE_GLOB) && defined(GLOB_MARK) && GLOB_MARK != 0 +#if defined(HAVE_GLOB) && defined(GLOB_MARK) && (GLOB_MARK != 0) REGISTER_LONG_CONSTANT("GLOB_MARK", GLOB_MARK, CONST_PERSISTENT); #endif -#if defined(HAVE_GLOB) && defined(GLOB_NOCHECK) && GLOB_NOCHECK != 0 +#if defined(HAVE_GLOB) && defined(GLOB_NOCHECK) && (GLOB_NOCHECK != 0) REGISTER_LONG_CONSTANT("GLOB_NOCHECK", GLOB_NOCHECK, CONST_PERSISTENT); #endif -#if defined(HAVE_GLOB) && defined(GLOB_NOESCAPE) && GLOB_NOESCAPE != 0 +#if defined(HAVE_GLOB) && defined(GLOB_NOESCAPE) && (GLOB_NOESCAPE != 0) REGISTER_LONG_CONSTANT("GLOB_NOESCAPE", GLOB_NOESCAPE, CONST_PERSISTENT); #endif -#if defined(HAVE_GLOB) && defined(GLOB_NOSORT) && GLOB_NOSORT != 0 +#if defined(HAVE_GLOB) && defined(GLOB_NOSORT) && (GLOB_NOSORT != 0) REGISTER_LONG_CONSTANT("GLOB_NOSORT", GLOB_NOSORT, CONST_PERSISTENT); #endif #if defined(HAVE_GLOB) && defined(GLOB_ONLYDIR) From f74b63a4c9148230d691ad7bf28fd5c1202b9b53 Mon Sep 17 00:00:00 2001 From: haszi Date: Tue, 13 Feb 2024 08:29:47 +0100 Subject: [PATCH 7/7] Correct parentheses --- ext/standard/dir.stub.php | 12 ++++++------ ext/standard/dir_arginfo.h | 14 +++++++------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/ext/standard/dir.stub.php b/ext/standard/dir.stub.php index 356549c9a94f0..b0c12e011674d 100755 --- a/ext/standard/dir.stub.php +++ b/ext/standard/dir.stub.php @@ -3,42 +3,42 @@ /** @generate-class-entries */ #ifdef HAVE_GLOB -#if defined(GLOB_BRACE) && (GLOB_BRACE != 0) +#if (defined(GLOB_BRACE) && GLOB_BRACE != 0) /** * @var int * @cvalue GLOB_BRACE */ const GLOB_BRACE = UNKNOWN; #endif -#if defined(GLOB_ERR) && (GLOB_ERR != 0) +#if (defined(GLOB_ERR) && GLOB_ERR != 0) /** * @var int * @cvalue GLOB_ERR */ const GLOB_ERR = UNKNOWN; #endif -#if defined(GLOB_MARK) && (GLOB_MARK != 0) +#if (defined(GLOB_MARK) && GLOB_MARK != 0) /** * @var int * @cvalue GLOB_MARK */ const GLOB_MARK = UNKNOWN; #endif -#if defined(GLOB_NOCHECK) && (GLOB_NOCHECK != 0) +#if (defined(GLOB_NOCHECK) && GLOB_NOCHECK != 0) /** * @var int * @cvalue GLOB_NOCHECK */ const GLOB_NOCHECK = UNKNOWN; #endif -#if defined(GLOB_NOESCAPE) && (GLOB_NOESCAPE != 0) +#if (defined(GLOB_NOESCAPE) && GLOB_NOESCAPE != 0) /** * @var int * @cvalue GLOB_NOESCAPE */ const GLOB_NOESCAPE = UNKNOWN; #endif -#if defined(GLOB_NOSORT) && (GLOB_NOSORT != 0) +#if (defined(GLOB_NOSORT) && GLOB_NOSORT != 0) /** * @var int * @cvalue GLOB_NOSORT diff --git a/ext/standard/dir_arginfo.h b/ext/standard/dir_arginfo.h index ae502117759f4..e1889eac6ac48 100644 --- a/ext/standard/dir_arginfo.h +++ b/ext/standard/dir_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 614659d3db7010c8408da704ef40a65879ae6d26 */ + * Stub hash: f2571fbbcff57095abcb846f148644e10b2db2e8 */ ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_Directory_close, 0, 0, IS_VOID, 0) ZEND_END_ARG_INFO() @@ -24,22 +24,22 @@ static const zend_function_entry class_Directory_methods[] = { static void register_dir_symbols(int module_number) { -#if defined(HAVE_GLOB) && defined(GLOB_BRACE) && (GLOB_BRACE != 0) +#if defined(HAVE_GLOB) && (defined(GLOB_BRACE) && GLOB_BRACE != 0) REGISTER_LONG_CONSTANT("GLOB_BRACE", GLOB_BRACE, CONST_PERSISTENT); #endif -#if defined(HAVE_GLOB) && defined(GLOB_ERR) && (GLOB_ERR != 0) +#if defined(HAVE_GLOB) && (defined(GLOB_ERR) && GLOB_ERR != 0) REGISTER_LONG_CONSTANT("GLOB_ERR", GLOB_ERR, CONST_PERSISTENT); #endif -#if defined(HAVE_GLOB) && defined(GLOB_MARK) && (GLOB_MARK != 0) +#if defined(HAVE_GLOB) && (defined(GLOB_MARK) && GLOB_MARK != 0) REGISTER_LONG_CONSTANT("GLOB_MARK", GLOB_MARK, CONST_PERSISTENT); #endif -#if defined(HAVE_GLOB) && defined(GLOB_NOCHECK) && (GLOB_NOCHECK != 0) +#if defined(HAVE_GLOB) && (defined(GLOB_NOCHECK) && GLOB_NOCHECK != 0) REGISTER_LONG_CONSTANT("GLOB_NOCHECK", GLOB_NOCHECK, CONST_PERSISTENT); #endif -#if defined(HAVE_GLOB) && defined(GLOB_NOESCAPE) && (GLOB_NOESCAPE != 0) +#if defined(HAVE_GLOB) && (defined(GLOB_NOESCAPE) && GLOB_NOESCAPE != 0) REGISTER_LONG_CONSTANT("GLOB_NOESCAPE", GLOB_NOESCAPE, CONST_PERSISTENT); #endif -#if defined(HAVE_GLOB) && defined(GLOB_NOSORT) && (GLOB_NOSORT != 0) +#if defined(HAVE_GLOB) && (defined(GLOB_NOSORT) && GLOB_NOSORT != 0) REGISTER_LONG_CONSTANT("GLOB_NOSORT", GLOB_NOSORT, CONST_PERSISTENT); #endif #if defined(HAVE_GLOB) && defined(GLOB_ONLYDIR)