diff options
| author | Marcus Boerger <helly@php.net> | 2004-01-25 17:30:19 +0000 |
|---|---|---|
| committer | Marcus Boerger <helly@php.net> | 2004-01-25 17:30:19 +0000 |
| commit | 0711fdcede21badb28a4ed06bc619b176e2049d9 (patch) | |
| tree | 557b9345966e0b471ae846ea4c3b81c98a1d2890 /ext/spl/spl_functions.c | |
| parent | e0c0c9f620354d96fc9c36d22ac6dc497307576f (diff) | |
| download | php-git-0711fdcede21badb28a4ed06bc619b176e2049d9.tar.gz | |
Show supported classes & interfaces in -i and phpinfo()
Diffstat (limited to 'ext/spl/spl_functions.c')
| -rwxr-xr-x | ext/spl/spl_functions.c | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/ext/spl/spl_functions.c b/ext/spl/spl_functions.c index 0632758167..feccacac53 100755 --- a/ext/spl/spl_functions.c +++ b/ext/spl/spl_functions.c @@ -104,39 +104,46 @@ void spl_register_property( zend_class_entry * class_entry, char *prop_name, zva /* }}} */ /* {{{ spl_add_class_name */ -void spl_add_class_name(zval * list, zend_class_entry * pce TSRMLS_DC) +void spl_add_class_name(zval *list, zend_class_entry * pce, int allow, int ce_flags TSRMLS_DC) { size_t len = strlen(pce->name); zval *tmp; - if (zend_hash_find(Z_ARRVAL_P(list), pce->name, len+1, (void*)&tmp) == FAILURE) { - MAKE_STD_ZVAL(tmp); - ZVAL_STRING(tmp, pce->name, 1); - zend_hash_add(Z_ARRVAL_P(list), pce->name, len+1, &tmp, sizeof(zval *), NULL); + if (!allow || (allow > 0 && pce->ce_flags & ce_flags) || (allow < 0 && !(pce->ce_flags & ce_flags))) { + if (zend_hash_find(Z_ARRVAL_P(list), pce->name, len+1, (void*)&tmp) == FAILURE) { + MAKE_STD_ZVAL(tmp); + ZVAL_STRING(tmp, pce->name, 1); + zend_hash_add(Z_ARRVAL_P(list), pce->name, len+1, &tmp, sizeof(zval *), NULL); + } } } /* }}} */ /* {{{ spl_add_interfaces */ -void spl_add_interfaces(zval *list, zend_class_entry * pce TSRMLS_DC) +void spl_add_interfaces(zval *list, zend_class_entry * pce, int allow, int ce_flags TSRMLS_DC) { zend_uint num_interfaces; for (num_interfaces = 0; num_interfaces < pce->num_interfaces; num_interfaces++) { - spl_add_class_name(list, pce->interfaces[num_interfaces] TSRMLS_CC); + spl_add_class_name(list, pce->interfaces[num_interfaces], allow, ce_flags TSRMLS_CC); } } /* }}} */ /* {{{ spl_add_classes */ -int spl_add_classes(zend_class_entry ** ppce, zval *list TSRMLS_DC) +int spl_add_classes(zend_class_entry ** ppce, zval *list, int sub, int allow, int ce_flags TSRMLS_DC) { + if (!ppce) { + return 0; + } zend_class_entry *pce = *ppce; - spl_add_class_name(list, pce TSRMLS_CC); - spl_add_interfaces(list, pce TSRMLS_CC); - while (pce->parent) { - pce = pce->parent; - spl_add_classes(&pce, list TSRMLS_CC); + spl_add_class_name(list, pce, allow, ce_flags TSRMLS_CC); + if (sub) { + spl_add_interfaces(list, pce, allow, ce_flags TSRMLS_CC); + while (pce->parent) { + pce = pce->parent; + spl_add_classes(&pce, list, sub, allow, ce_flags TSRMLS_CC); + } } return 0; } |
