summaryrefslogtreecommitdiff
path: root/ext/spl/spl_functions.c
diff options
context:
space:
mode:
authorMarcus Boerger <helly@php.net>2004-01-25 17:30:19 +0000
committerMarcus Boerger <helly@php.net>2004-01-25 17:30:19 +0000
commit0711fdcede21badb28a4ed06bc619b176e2049d9 (patch)
tree557b9345966e0b471ae846ea4c3b81c98a1d2890 /ext/spl/spl_functions.c
parente0c0c9f620354d96fc9c36d22ac6dc497307576f (diff)
downloadphp-git-0711fdcede21badb28a4ed06bc619b176e2049d9.tar.gz
Show supported classes & interfaces in -i and phpinfo()
Diffstat (limited to 'ext/spl/spl_functions.c')
-rwxr-xr-xext/spl/spl_functions.c33
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;
}