summaryrefslogtreecommitdiff
path: root/ext/spl/spl_functions.c
diff options
context:
space:
mode:
authorMarcus Boerger <helly@php.net>2003-05-29 23:44:22 +0000
committerMarcus Boerger <helly@php.net>2003-05-29 23:44:22 +0000
commit90640a77746a7f2e53ba809a0898343bb84147a1 (patch)
tree7162bd02cdff539ecdef756eac973eb221f6c800 /ext/spl/spl_functions.c
parent493633d16f0510a811b275e433cc374053ad6466 (diff)
downloadphp-git-90640a77746a7f2e53ba809a0898343bb84147a1.tar.gz
Optimize
Diffstat (limited to 'ext/spl/spl_functions.c')
-rwxr-xr-xext/spl/spl_functions.c22
1 files changed, 10 insertions, 12 deletions
diff --git a/ext/spl/spl_functions.c b/ext/spl/spl_functions.c
index cad40e5566..93dfe0bc2c 100755
--- a/ext/spl/spl_functions.c
+++ b/ext/spl/spl_functions.c
@@ -134,12 +134,13 @@ char * spl_make_fully_qualyfied_name(zend_class_entry * pce TSRMLS_DC)
void spl_add_class_name(zval * list, zend_class_entry * pce TSRMLS_DC)
{
char * str = spl_make_fully_qualyfied_name(pce TSRMLS_CC);
+ size_t len = strlen(str);
zval *tmp;
- if (zend_hash_find(Z_ARRVAL_P(list), str, strlen(str)+1, (void*)&tmp) == FAILURE) {
+ if (zend_hash_find(Z_ARRVAL_P(list), str, len+1, (void*)&tmp) == FAILURE) {
MAKE_STD_ZVAL(tmp);
ZVAL_STRING(tmp, str, 0);
- zend_hash_add(Z_ARRVAL_P(list), str, strlen(str)+1, &tmp, sizeof(zval *), NULL);
+ zend_hash_add(Z_ARRVAL_P(list), str, len+1, &tmp, sizeof(zval *), NULL);
} else {
efree(str);
}
@@ -153,23 +154,20 @@ void spl_add_interfaces(zval *list, zend_class_entry * pce TSRMLS_DC)
for (num_interfaces = 0; num_interfaces < pce->num_interfaces; num_interfaces++) {
spl_add_class_name(list, pce->interfaces[num_interfaces] TSRMLS_CC);
- spl_add_interfaces(list, pce->interfaces[num_interfaces] TSRMLS_CC);
- }
- if (pce->parent) {
- spl_add_class_name(list, pce->parent TSRMLS_CC);
- spl_add_interfaces(list, pce->parent TSRMLS_CC);
}
}
/* }}} */
-/* {{{ spl_add_interfaces */
+/* {{{ spl_add_classes */
int spl_add_classes(zend_class_entry ** ppce, zval *list TSRMLS_DC)
{
- spl_add_class_name(list, *ppce TSRMLS_CC);
- if ((*ppce)->parent) {
- spl_add_classes(&(*ppce)->parent, list TSRMLS_CC);
+ 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->parent, list TSRMLS_CC);
}
- spl_add_interfaces(list, *ppce TSRMLS_CC);
return 0;
}
/* }}} */