helly Thu May 29 08:54:01 2003 EDT
Modified files:
/php4/ext/standard basic_functions.c
Log:
MFB
Index: php4/ext/standard/basic_functions.c
diff -u php4/ext/standard/basic_functions.c:1.611
php4/ext/standard/basic_functions.c:1.612
--- php4/ext/standard/basic_functions.c:1.611 Wed May 21 17:36:50 2003
+++ php4/ext/standard/basic_functions.c Thu May 29 08:54:01 2003
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: basic_functions.c,v 1.611 2003/05/21 21:36:50 pollita Exp $ */
+/* $Id: basic_functions.c,v 1.612 2003/05/29 12:54:01 helly Exp $ */
#include "php.h"
#include "php_streams.h"
@@ -268,8 +268,82 @@
}
#endif
+typedef struct {
+ zval *return_value;
+ zend_class_entry *scope;
+} add_info_t;
+
+/* {{{ add_function_info */
+static int add_function_info(zend_function *func, add_info_t *add_info TSRMLS_DC)
+{
+ char *name;
+ char *decorated;
+ zend_class_entry *scope;
+ if (func->internal_function.handler != zif_display_disabled_function) {
+ /* ?? internal_function->type = ZEND_INTERNAL_FUNCTION; */
+ if (func->common.scope)
+ scope = func->common.scope;
+ else
+ scope = add_info->scope;
+ if (scope) {
+ spprintf(&name, 0, "%s::%s", scope->name,
func->common.function_name);
+ spprintf(&decorated, 0, "%s%s %s%s::%s()",
+#ifdef ZEND_ACC_FINAL
+ func->common.fn_flags & ZEND_ACC_FINAL ? "final " :
+#endif
+ (func->common.fn_flags & ZEND_ACC_ABSTRACT ? "abstract
" : ""),
+ zend_visibility_string(func->common.fn_flags),
+ func->common.fn_flags & ZEND_ACC_STATIC ? "static " :
"",
+ scope->name,
+ func->common.function_name);
+ } else {
+ name = estrdup(func->common.function_name);
+ spprintf(&decorated, 0, "%s()", func->common.function_name);
+ }
+ add_assoc_string(add_info->return_value, name, decorated, 0);
+ efree(name);
+ }
+ return 0;
+}
+/* }}} */
+
+/* {{{ add_class_info */
+static int add_class_info(zend_class_entry **zclass, add_info_t *add_info TSRMLS_DC)
+{
+/* char *f;
+ spprintf(&f, 0, "class %s", (*zclass)->name);
+ add_next_index_string(return_value, f, 0);*/
+ add_info->scope = *zclass;
+ zend_hash_apply_with_argument(&(*zclass)->function_table,
(apply_func_arg_t)add_function_info, add_info TSRMLS_CC);
+ return 0;
+}
+/* }}} */
+
+/* {{{ proto array function_list()
+ Returns an array of all php functions */
+PHP_FUNCTION(function_list)
+{
+ add_info_t add_info;
+
+ if (ZEND_NUM_ARGS()) {
+ WRONG_PARAM_COUNT;
+ }
+
+ if (array_init(return_value) == FAILURE) {
+ php_error_docref(NULL TSRMLS_CC, E_ERROR, "Unable to initialize
array");
+ RETURN_FALSE;
+ }
+
+ add_info.return_value = return_value;
+ add_info.scope = NULL;
+
+ zend_hash_apply_with_argument(EG(function_table),
(apply_func_arg_t)add_function_info, &add_info TSRMLS_CC);
+ zend_hash_apply_with_argument(EG(class_table),
(apply_func_arg_t)add_class_info, &add_info TSRMLS_CC);
+}
+/* }}} */
function_entry basic_functions[] = {
+ PHP_FE(function_list,
NULL)
PHP_FE(constant,
NULL)
PHP_FE(bin2hex,
NULL)
PHP_FE(sleep,
NULL)
@@ -1507,7 +1581,7 @@
* Attempt to allocate enough memory to hold all of the arguments
* and a trailing NULL
*/
- if ((argv = (char **) emalloc((argc + 1) * sizeof(char *))) == NULL) {
+ if ((argv = (char **) safe_emalloc(sizeof(char *), (argc + 1), 0)) ==
NULL) {
RETURN_FALSE;
}
@@ -1875,7 +1949,7 @@
WRONG_PARAM_COUNT;
}
- params = emalloc(sizeof(zval **) * argc);
+ params = safe_emalloc(sizeof(zval **), argc, 0);
if (zend_get_parameters_array_ex(argc, params) == FAILURE) {
efree(params);
@@ -1949,7 +2023,7 @@
func_params_ht = Z_ARRVAL_PP(params);
count = zend_hash_num_elements(func_params_ht);
- func_params = emalloc(sizeof(zval **) * count);
+ func_params = safe_emalloc(sizeof(zval **), count, 0);
for (zend_hash_internal_pointer_reset(func_params_ht);
zend_hash_get_current_data(func_params_ht, (void **)
&func_params[current]) == SUCCESS;
@@ -1984,7 +2058,7 @@
if (arg_count < 2) {
WRONG_PARAM_COUNT;
}
- params = (zval ***) emalloc(sizeof(zval **) * arg_count);
+ params = (zval ***) safe_emalloc(sizeof(zval **), arg_count, 0);
if (zend_get_parameters_array_ex(arg_count, params) == FAILURE) {
efree(params);
@@ -2034,7 +2108,7 @@
params_ar = HASH_OF(*params);
num_elems = zend_hash_num_elements(params_ar);
- method_args = (zval ***) emalloc(sizeof(zval **) *num_elems);
+ method_args = (zval ***) safe_emalloc(sizeof(zval **), num_elems, 0);
for (zend_hash_internal_pointer_reset(params_ar);
zend_hash_get_current_data(params_ar, (void **)
&(method_args[element])) == SUCCESS;
@@ -2180,7 +2254,7 @@
WRONG_PARAM_COUNT;
}
- shutdown_function_entry.arguments = (pval **) emalloc(sizeof(pval *)
*shutdown_function_entry.arg_count);
+ shutdown_function_entry.arguments = (pval **) safe_emalloc(sizeof(pval *),
shutdown_function_entry.arg_count, 0);
if (zend_get_parameters_array(ht, shutdown_function_entry.arg_count,
shutdown_function_entry.arguments) == FAILURE) {
RETURN_FALSE;
@@ -2717,7 +2791,7 @@
WRONG_PARAM_COUNT;
}
- tick_fe.arguments = (zval **) emalloc(sizeof(zval *) * tick_fe.arg_count);
+ tick_fe.arguments = (zval **) safe_emalloc(sizeof(zval *), tick_fe.arg_count,
0);
if (zend_get_parameters_array(ht, tick_fe.arg_count, tick_fe.arguments) ==
FAILURE) {
RETURN_FALSE;
@@ -3064,4 +3138,3 @@
* vim600: fdm=marker
* vim: noet sw=4 ts=4
*/
-
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php