From: Marcus Boerger Date: Sun, 4 Mar 2007 12:18:02 +0000 (+0000) Subject: - MFH simplify, synch docu/implementation X-Git-Tag: php-5.2.2RC1~230 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ed359b4529f6d73c78a8dfcc81bf1fc3436d1870;p=php - MFH simplify, synch docu/implementation --- diff --git a/ext/spl/internal/parentiterator.inc b/ext/spl/internal/parentiterator.inc index 70f0bee796..33b7f9e918 100755 --- a/ext/spl/internal/parentiterator.inc +++ b/ext/spl/internal/parentiterator.inc @@ -4,7 +4,7 @@ * @ingroup SPL * @brief class FilterIterator * @author Marcus Boerger - * @date 2003 - 2005 + * @date 2003 - 2006 * * SPL - Standard PHP Library */ @@ -21,26 +21,12 @@ */ class ParentIterator extends RecursiveFilterIterator { - /** @param $it the RecursiveIterator to filter - */ - function __construct(RecursiveIterator $it) - { - parent::__construct($it); - } - /** @return whetehr the current element has children */ function accept() { return $this->it->hasChildren(); } - - /** @return the ParentIterator for the current elements children - */ - function getChildren() - { - return new ParentIterator($this->it->getChildren()); - } } ?> \ No newline at end of file diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c index 00b910dda0..222cf73600 100755 --- a/ext/spl/spl_directory.c +++ b/ext/spl/spl_directory.c @@ -448,6 +448,18 @@ static spl_filesystem_object * spl_filesystem_object_create_type(int ht, spl_fil return NULL; } /* }}} */ +static inline int spl_filesystem_is_dot(const char * d_name) /* {{{ */ +{ + return !strcmp(d_name, ".") || !strcmp(d_name, ".."); +} +/* }}} */ + +static int spl_filesystem_is_invalid_or_dot(const char * d_name) /* {{{ */ +{ + return d_name[0] == '\0' || spl_filesystem_is_dot(d_name); +} +/* }}} */ + /* {{{ proto void DirectoryIterator::__construct(string path) Cronstructs a new dir iterator from a path. */ SPL_METHOD(DirectoryIterator, __construct) @@ -681,7 +693,7 @@ SPL_METHOD(DirectoryIterator, isDot) { spl_filesystem_object *intern = (spl_filesystem_object*)zend_object_store_get_object(getThis() TSRMLS_CC); - RETURN_BOOL(!strcmp(intern->u.dir.entry.d_name, ".") || !strcmp(intern->u.dir.entry.d_name, "..")); + RETURN_BOOL(spl_filesystem_is_dot(intern->u.dir.entry.d_name)); } /* }}} */ @@ -972,7 +984,7 @@ SPL_METHOD(RecursiveDirectoryIterator, rewind) if (!intern->u.dir.dirp || !php_stream_readdir(intern->u.dir.dirp, &intern->u.dir.entry)) { intern->u.dir.entry.d_name[0] = '\0'; } - } while (!strcmp(intern->u.dir.entry.d_name, ".") || !strcmp(intern->u.dir.entry.d_name, "..")); + } while (spl_filesystem_is_dot(intern->u.dir.entry.d_name)); } /* }}} */ @@ -987,7 +999,7 @@ SPL_METHOD(RecursiveDirectoryIterator, next) if (!intern->u.dir.dirp || !php_stream_readdir(intern->u.dir.dirp, &intern->u.dir.entry)) { intern->u.dir.entry.d_name[0] = '\0'; } - } while (!strcmp(intern->u.dir.entry.d_name, ".") || !strcmp(intern->u.dir.entry.d_name, "..")); + } while (spl_filesystem_is_dot(intern->u.dir.entry.d_name)); if (intern->file_name) { efree(intern->file_name); intern->file_name = NULL; @@ -1002,7 +1014,7 @@ SPL_METHOD(RecursiveDirectoryIterator, hasChildren) zend_bool allow_links = 0; spl_filesystem_object *intern = (spl_filesystem_object*)zend_object_store_get_object(getThis() TSRMLS_CC); - if (!strcmp(intern->u.dir.entry.d_name, ".") || !strcmp(intern->u.dir.entry.d_name, "..")) { + if (spl_filesystem_is_invalid_or_dot(intern->u.dir.entry.d_name)) { RETURN_BOOL(0); } else { if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &allow_links) == FAILURE) { @@ -1274,7 +1286,7 @@ static void spl_filesystem_tree_it_move_forward(zend_object_iterator *iter TSRML if (!object->u.dir.dirp || !php_stream_readdir(object->u.dir.dirp, &object->u.dir.entry)) { object->u.dir.entry.d_name[0] = '\0'; } - } while (!strcmp(object->u.dir.entry.d_name, ".") || !strcmp(object->u.dir.entry.d_name, "..")); + } while (spl_filesystem_is_dot(intern->u.dir.entry.d_name)); if (object->file_name) { efree(object->file_name); object->file_name = NULL; @@ -1300,7 +1312,7 @@ static void spl_filesystem_tree_it_rewind(zend_object_iterator *iter TSRMLS_DC) if (!object->u.dir.dirp || !php_stream_readdir(object->u.dir.dirp, &object->u.dir.entry)) { object->u.dir.entry.d_name[0] = '\0'; } - } while (!strcmp(object->u.dir.entry.d_name, ".") || !strcmp(object->u.dir.entry.d_name, "..")); + } while (spl_filesystem_is_dot(intern->u.dir.entry.d_name)); if (iterator->current) { zval_ptr_dtor(&iterator->current); iterator->current = NULL; diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c index 471b24f433..e95ca8b9b2 100755 --- a/ext/spl/spl_iterators.c +++ b/ext/spl/spl_iterators.c @@ -1336,41 +1336,6 @@ SPL_METHOD(ParentIterator, __construct) spl_dual_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, spl_ce_ParentIterator, spl_ce_RecursiveIterator, DIT_ParentIterator); } /* }}} */ -/* {{{ proto bool ParentIterator::hasChildren() - Check whether the inner iterator's current element has children */ -SPL_METHOD(ParentIterator, hasChildren) -{ - spl_dual_it_object *intern; - zval *retval; - - intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); - - zend_call_method_with_0_params(&intern->inner.zobject, intern->inner.ce, NULL, "haschildren", &retval); - if (retval) { - RETURN_ZVAL(retval, 0, 1); - } else { - RETURN_FALSE; - } -} /* }}} */ - -/* {{{ proto ParentIterator ParentIterator::getChildren() - Return the inner iterator's children contained in a ParentIterator */ -SPL_METHOD(ParentIterator, getChildren) -{ - spl_dual_it_object *intern; - zval *retval; - - intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); - - zend_call_method_with_0_params(&intern->inner.zobject, intern->inner.ce, NULL, "getchildren", &retval); - if (!EG(exception) && retval) { - spl_instantiate_arg_ex1(Z_OBJCE_P(getThis()), &return_value, 0, retval TSRMLS_CC); - } - if (retval) { - zval_ptr_dtor(&retval); - } -} /* }}} */ - #if HAVE_PCRE || HAVE_BUNDLED_PCRE /* {{{ proto void RegexIterator::__construct(Iterator it, string regex [, int mode [, int flags [, int preg_flags]]]) Create an RegexIterator from another iterator and a regular expression */ @@ -1665,7 +1630,6 @@ ZEND_END_ARG_INFO(); static zend_function_entry spl_funcs_RecursiveFilterIterator[] = { SPL_ME(RecursiveFilterIterator, __construct, arginfo_parent_it___construct, ZEND_ACC_PUBLIC) - SPL_MA(ParentIterator, accept, RecursiveFilterIterator, hasChildren, NULL, ZEND_ACC_PUBLIC) SPL_ME(RecursiveFilterIterator, hasChildren, NULL, ZEND_ACC_PUBLIC) SPL_ME(RecursiveFilterIterator, getChildren, NULL, ZEND_ACC_PUBLIC) {NULL, NULL, NULL} @@ -1673,10 +1637,7 @@ static zend_function_entry spl_funcs_RecursiveFilterIterator[] = { static zend_function_entry spl_funcs_ParentIterator[] = { SPL_ME(ParentIterator, __construct, arginfo_parent_it___construct, ZEND_ACC_PUBLIC) - SPL_MA(ParentIterator, accept, ParentIterator, hasChildren, NULL, ZEND_ACC_PUBLIC) - SPL_ME(ParentIterator, hasChildren, NULL, ZEND_ACC_PUBLIC) - SPL_ME(ParentIterator, getChildren, NULL, ZEND_ACC_PUBLIC) - SPL_ME(dual_it, getInnerIterator, NULL, ZEND_ACC_PUBLIC) + SPL_MA(ParentIterator, accept, RecursiveFilterIterator, hasChildren, NULL, ZEND_ACC_PUBLIC) {NULL, NULL, NULL} };