From: Máté Kocsis Date: Mon, 28 Oct 2019 17:56:49 +0000 (+0100) Subject: Add stubs for directory and file functions X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fee94da1271ba113baf1145a10dd0d5e7dd74f4f;p=php Add stubs for directory and file functions --- diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 80c1ea9ec3..8cc57e261e 100755 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -368,55 +368,7 @@ ZEND_BEGIN_ARG_INFO(arginfo_strptime, 0) ZEND_END_ARG_INFO() #endif /* }}} */ -/* {{{ dir.c */ -ZEND_BEGIN_ARG_INFO_EX(arginfo_opendir, 0, 0, 1) - ZEND_ARG_INFO(0, path) - ZEND_ARG_INFO(0, context) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_dir, 0, 0, 1) - ZEND_ARG_INFO(0, directory) - ZEND_ARG_INFO(0, context) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_closedir, 0, 0, 0) - ZEND_ARG_INFO(0, dir_handle) -ZEND_END_ARG_INFO() - -#if defined(HAVE_CHROOT) && !defined(ZTS) && ENABLE_CHROOT_FUNC -ZEND_BEGIN_ARG_INFO(arginfo_chroot, 0) - ZEND_ARG_INFO(0, directory) -ZEND_END_ARG_INFO() -#endif - -ZEND_BEGIN_ARG_INFO(arginfo_chdir, 0) - ZEND_ARG_INFO(0, directory) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_getcwd, 0) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_rewinddir, 0, 0, 0) - ZEND_ARG_INFO(0, dir_handle) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_readdir, 0, 0, 0) - ZEND_ARG_INFO(0, dir_handle) -ZEND_END_ARG_INFO() -#ifdef HAVE_GLOB -ZEND_BEGIN_ARG_INFO_EX(arginfo_glob, 0, 0, 1) - ZEND_ARG_INFO(0, pattern) - ZEND_ARG_INFO(0, flags) -ZEND_END_ARG_INFO() -#endif - -ZEND_BEGIN_ARG_INFO_EX(arginfo_scandir, 0, 0, 1) - ZEND_ARG_INFO(0, dir) - ZEND_ARG_INFO(0, sorting_order) - ZEND_ARG_INFO(0, context) -ZEND_END_ARG_INFO() -/* }}} */ /* {{{ dns.c */ ZEND_BEGIN_ARG_INFO(arginfo_gethostbyaddr, 0) ZEND_ARG_INFO(0, ip_address) @@ -691,133 +643,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO(arginfo_sys_get_temp_dir, 0) ZEND_END_ARG_INFO() /* }}} */ -/* {{{ filestat.c */ -ZEND_BEGIN_ARG_INFO(arginfo_disk_total_space, 0) - ZEND_ARG_INFO(0, path) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_disk_free_space, 0) - ZEND_ARG_INFO(0, path) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_chgrp, 0) - ZEND_ARG_INFO(0, filename) - ZEND_ARG_INFO(0, group) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_chown, 0) - ZEND_ARG_INFO(0, filename) - ZEND_ARG_INFO(0, user) -ZEND_END_ARG_INFO() - -#if HAVE_LCHOWN -ZEND_BEGIN_ARG_INFO(arginfo_lchgrp, 0) - ZEND_ARG_INFO(0, filename) - ZEND_ARG_INFO(0, group) -ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO(arginfo_lchown, 0) - ZEND_ARG_INFO(0, filename) - ZEND_ARG_INFO(0, user) -ZEND_END_ARG_INFO() -#endif - -ZEND_BEGIN_ARG_INFO(arginfo_chmod, 0) - ZEND_ARG_INFO(0, filename) - ZEND_ARG_INFO(0, mode) -ZEND_END_ARG_INFO() - -#if HAVE_UTIME -ZEND_BEGIN_ARG_INFO_EX(arginfo_touch, 0, 0, 1) - ZEND_ARG_INFO(0, filename) - ZEND_ARG_INFO(0, time) - ZEND_ARG_INFO(0, atime) -ZEND_END_ARG_INFO() -#endif - -ZEND_BEGIN_ARG_INFO_EX(arginfo_clearstatcache, 0, 0, 0) - ZEND_ARG_INFO(0, clear_realpath_cache) - ZEND_ARG_INFO(0, filename) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_realpath_cache_size, 0) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_realpath_cache_get, 0) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_fileperms, 0) - ZEND_ARG_INFO(0, filename) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_fileinode, 0) - ZEND_ARG_INFO(0, filename) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_filesize, 0) - ZEND_ARG_INFO(0, filename) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_fileowner, 0) - ZEND_ARG_INFO(0, filename) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_filegroup, 0) - ZEND_ARG_INFO(0, filename) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_fileatime, 0) - ZEND_ARG_INFO(0, filename) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_filemtime, 0) - ZEND_ARG_INFO(0, filename) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_filectime, 0) - ZEND_ARG_INFO(0, filename) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_filetype, 0) - ZEND_ARG_INFO(0, filename) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_is_writable, _IS_BOOL, 0) - ZEND_ARG_INFO(0, filename) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_is_readable, _IS_BOOL, 0) - ZEND_ARG_INFO(0, filename) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_is_executable, _IS_BOOL, 0) - ZEND_ARG_INFO(0, filename) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_is_file, _IS_BOOL, 0) - ZEND_ARG_INFO(0, filename) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_is_dir, _IS_BOOL, 0) - ZEND_ARG_INFO(0, filename) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_is_link, _IS_BOOL, 0) - ZEND_ARG_INFO(0, filename) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_file_exists, 0) - ZEND_ARG_INFO(0, filename) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_lstat, 0) - ZEND_ARG_INFO(0, filename) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_stat, 0) - ZEND_ARG_INFO(0, filename) -ZEND_END_ARG_INFO() -/* }}} */ /* {{{ formatted_print.c */ ZEND_BEGIN_ARG_INFO_EX(arginfo_sprintf, 0, 0, 1) ZEND_ARG_INFO(0, format) diff --git a/ext/standard/basic_functions.stub.php b/ext/standard/basic_functions.stub.php index cacaa7ba3a..ed2397b7c1 100755 --- a/ext/standard/basic_functions.stub.php +++ b/ext/standard/basic_functions.stub.php @@ -596,3 +596,149 @@ function substr_compare(string $main_str, string $str, int $offset, ?int $length function utf8_encode(string $data): string {} function utf8_decode(string $data): string {} + +/* dir.c */ + +class Directory +{ + /** + * @param resource $dir_handle + * @return void + */ + public function close($dir_handle = UNKNOWN) {} + + /** + * @param resource $dir_handle + * @return void + */ + public function rewind($dir_handle = UNKNOWN) {} + + /** + * @param resource $dir_handle + * @return string|false + */ + public function read($dir_handle = UNKNOWN) { } +} + +/** + * @param resource $context + * @return resource|false + */ +function opendir(string $path, $context = UNKNOWN) {} + +/** + * @param resource $context + * @return Directory|false + */ +function dir(string $path, $context = UNKNOWN) {} + +/** @param resource $dir_handle */ +function closedir($dir_handle = UNKNOWN): void {} + +function chdir(string $directory): bool {} + +#if defined(HAVE_CHROOT) && !defined(ZTS) && ENABLE_CHROOT_FUNC +function chroot(string $directory): bool {} +#endif + +/** @return string|false */ +function getcwd() {} + +/** @param resource $dir_handle */ +function rewinddir($dir_handle = UNKNOWN): void {} + +/** @return string|false */ +function readdir($dir_handle = UNKNOWN) {} + +/** + * @param resource $context + * @return array|false + */ +function scandir(string $directory, int $sorting_order = 0, $context = UNKNOWN) {} + +#ifdef HAVE_GLOB +/** @return array|false */ +function glob(string $pattern, int $flags = 0) {} +#endif + +/* filestat.c */ + +/** @return int|false */ +function fileatime(string $filename) {} + +/** @return int|false */ +function filectime(string $filename) {} + +/** @return int|false */ +function filegroup(string $filename) {} + +/** @return int|false */ +function fileinode(string $filename) {} + +/** @return int|false */ +function filemtime(string $filename) {} + +/** @return int|false */ +function fileowner(string $filename) {} + +/** @return int|false */ +function fileperms(string $filename) {} + +/** @return int|false */ +function filesize(string $filename) {} + +/** @return string|false */ +function filetype(string $filename) {} + +function file_exists(string $filename): bool {} + +function is_writable(string $filename): bool {} + +function is_writeable(string $filename): bool {} + +function is_readable(string $filename): bool {} + +function is_executable(string $filename): bool {} + +function is_file(string $filename): bool {} + +function is_dir(string $filename): bool {} + +function is_link(string $filename): bool {} + +/** @return array|false */ +function stat(string $filename) {} + +/** @return array|false */ +function lstat(string $filename) {} + +function chown(string $filename, $user): bool {} + +function chgrp(string $filename, $group): bool {} + +#if HAVE_LCHOWN +function lchown(string $filename, $user): bool {} + +function lchgrp(string $filename, $group): bool {} +#endif + +function chmod(string $filename, int $mode): bool {} + +#if HAVE_UTIME +function touch(string $filename, int $time = 0, int $atime = 0): bool {} +#endif + +function clearstatcache(bool $clear_realpath_cache = false, string $filename = ""): void {} + +/** @return float|false */ +function disk_total_space(string $directory) {} + +/** @return float|false */ +function disk_free_space(string $directory) {} + +/** @return float|false */ +function diskfreespace(string $directory) {} + +function realpath_cache_get(): array {} + +function realpath_cache_size(): int {} diff --git a/ext/standard/basic_functions_arginfo.h b/ext/standard/basic_functions_arginfo.h index 40bac9cc7e..1af45c540c 100755 --- a/ext/standard/basic_functions_arginfo.h +++ b/ext/standard/basic_functions_arginfo.h @@ -805,3 +805,147 @@ ZEND_END_ARG_INFO() #define arginfo_utf8_encode arginfo_bin2hex #define arginfo_utf8_decode arginfo_bin2hex + +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Directory_close, 0, 0, 0) + ZEND_ARG_INFO(0, dir_handle) +ZEND_END_ARG_INFO() + +#define arginfo_class_Directory_rewind arginfo_class_Directory_close + +#define arginfo_class_Directory_read arginfo_class_Directory_close + +ZEND_BEGIN_ARG_INFO_EX(arginfo_opendir, 0, 0, 1) + ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 0) + ZEND_ARG_INFO(0, context) +ZEND_END_ARG_INFO() + +#define arginfo_dir arginfo_opendir + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_closedir, 0, 0, IS_VOID, 0) + ZEND_ARG_INFO(0, dir_handle) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_chdir, 0, 1, _IS_BOOL, 0) + ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0) +ZEND_END_ARG_INFO() + +#if defined(HAVE_CHROOT) && !defined(ZTS) && ENABLE_CHROOT_FUNC +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_chroot, 0, 1, _IS_BOOL, 0) + ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0) +ZEND_END_ARG_INFO() +#endif + +#define arginfo_getcwd arginfo_ob_get_flush + +#define arginfo_rewinddir arginfo_closedir + +#define arginfo_readdir arginfo_class_Directory_close + +ZEND_BEGIN_ARG_INFO_EX(arginfo_scandir, 0, 0, 1) + ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, sorting_order, IS_LONG, 0) + ZEND_ARG_INFO(0, context) +ZEND_END_ARG_INFO() + +#if defined(HAVE_GLOB) +ZEND_BEGIN_ARG_INFO_EX(arginfo_glob, 0, 0, 1) + ZEND_ARG_TYPE_INFO(0, pattern, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0) +ZEND_END_ARG_INFO() +#endif + +ZEND_BEGIN_ARG_INFO_EX(arginfo_fileatime, 0, 0, 1) + ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) +ZEND_END_ARG_INFO() + +#define arginfo_filectime arginfo_fileatime + +#define arginfo_filegroup arginfo_fileatime + +#define arginfo_fileinode arginfo_fileatime + +#define arginfo_filemtime arginfo_fileatime + +#define arginfo_fileowner arginfo_fileatime + +#define arginfo_fileperms arginfo_fileatime + +#define arginfo_filesize arginfo_fileatime + +#define arginfo_filetype arginfo_fileatime + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_file_exists, 0, 1, _IS_BOOL, 0) + ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) +ZEND_END_ARG_INFO() + +#define arginfo_is_writable arginfo_file_exists + +#define arginfo_is_writeable arginfo_file_exists + +#define arginfo_is_readable arginfo_file_exists + +#define arginfo_is_executable arginfo_file_exists + +#define arginfo_is_file arginfo_file_exists + +#define arginfo_is_dir arginfo_file_exists + +#define arginfo_is_link arginfo_file_exists + +#define arginfo_stat arginfo_fileatime + +#define arginfo_lstat arginfo_fileatime + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_chown, 0, 2, _IS_BOOL, 0) + ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) + ZEND_ARG_INFO(0, user) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_chgrp, 0, 2, _IS_BOOL, 0) + ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) + ZEND_ARG_INFO(0, group) +ZEND_END_ARG_INFO() + +#if HAVE_LCHOWN +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_lchown, 0, 2, _IS_BOOL, 0) + ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) + ZEND_ARG_INFO(0, user) +ZEND_END_ARG_INFO() +#endif + +#if HAVE_LCHOWN +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_lchgrp, 0, 2, _IS_BOOL, 0) + ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) + ZEND_ARG_INFO(0, group) +ZEND_END_ARG_INFO() +#endif + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_chmod, 0, 2, _IS_BOOL, 0) + ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, mode, IS_LONG, 0) +ZEND_END_ARG_INFO() + +#if HAVE_UTIME +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_touch, 0, 1, _IS_BOOL, 0) + ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, time, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, atime, IS_LONG, 0) +ZEND_END_ARG_INFO() +#endif + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_clearstatcache, 0, 0, IS_VOID, 0) + ZEND_ARG_TYPE_INFO(0, clear_realpath_cache, _IS_BOOL, 0) + ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_disk_total_space, 0, 0, 1) + ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0) +ZEND_END_ARG_INFO() + +#define arginfo_disk_free_space arginfo_disk_total_space + +#define arginfo_diskfreespace arginfo_disk_total_space + +#define arginfo_realpath_cache_get arginfo_ob_list_handlers + +#define arginfo_realpath_cache_size arginfo_ob_get_level diff --git a/ext/standard/dir.c b/ext/standard/dir.c index e57cc4582e..db15948a1d 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 "basic_functions_arginfo.h" #if HAVE_UNISTD_H #include @@ -84,16 +85,10 @@ static zend_class_entry *dir_class_entry_ptr; } \ } -/* {{{ arginfo */ -ZEND_BEGIN_ARG_INFO_EX(arginfo_dir, 0, 0, 0) - ZEND_ARG_INFO(0, dir_handle) -ZEND_END_ARG_INFO() -/* }}} */ - static const zend_function_entry php_dir_class_functions[] = { - PHP_FALIAS(close, closedir, arginfo_dir) - PHP_FALIAS(rewind, rewinddir, arginfo_dir) - PHP_NAMED_FE(read, php_if_readdir, arginfo_dir) + PHP_FALIAS(close, closedir, arginfo_class_Directory_close) + PHP_FALIAS(rewind, rewinddir, arginfo_class_Directory_rewind) + PHP_NAMED_FE(read, php_if_readdir, arginfo_class_Directory_read) PHP_FE_END };