]> granicus.if.org Git - php/commitdiff
Add stubs for directory and file functions
authorMáté Kocsis <kocsismate@woohoolabs.com>
Mon, 28 Oct 2019 17:56:49 +0000 (18:56 +0100)
committerChristoph M. Becker <cmbecker69@gmx.de>
Wed, 30 Oct 2019 09:10:40 +0000 (10:10 +0100)
ext/standard/basic_functions.c
ext/standard/basic_functions.stub.php
ext/standard/basic_functions_arginfo.h
ext/standard/dir.c

index 80c1ea9ec385077fbb9190174a5c84a4aa007a4c..8cc57e261e2bb61053b8a2a3e223828f17cdb91b 100755 (executable)
@@ -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)
index cacaa7ba3add879475f92b810135658ce27e0132..ed2397b7c150487bb17d8a2818c507584383ab07 100755 (executable)
@@ -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 {}
index 40bac9cc7eeae9bbd3d9dcb2c32c23cd95de9516..1af45c540c20c9711ce155e99aca8ed258394ef9 100755 (executable)
@@ -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
index e57cc4582eb4abb975c4f6e341342b5d339a0700..db15948a1da2448ffa76d0a4d8ae968cb1e5f97b 100644 (file)
@@ -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 <unistd.h>
@@ -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
 };