[PHP-CVS] cvs: php-src(PHP_5_2) /ext/spl spl_directory.c spl_directory.h
iliaa Wed Jul 8 03:08:03 2009 UTC Modified files: (Branch: PHP_5_2) /php-src/ext/splspl_directory.c spl_directory.h Log: MFB: Fixed bug #48788 (RecursiveDirectoryIterator doesn't descend into symlinked directories). http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_directory.c?r1=1.45.2.27.2.30r2=1.45.2.27.2.31diff_format=u Index: php-src/ext/spl/spl_directory.c diff -u php-src/ext/spl/spl_directory.c:1.45.2.27.2.30 php-src/ext/spl/spl_directory.c:1.45.2.27.2.31 --- php-src/ext/spl/spl_directory.c:1.45.2.27.2.30 Wed Dec 31 11:17:44 2008 +++ php-src/ext/spl/spl_directory.c Wed Jul 8 03:08:03 2009 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: spl_directory.c,v 1.45.2.27.2.30 2008/12/31 11:17:44 sebastian Exp $ */ +/* $Id: spl_directory.c,v 1.45.2.27.2.31 2009/07/08 03:08:03 iliaa Exp $ */ #ifdef HAVE_CONFIG_H # include config.h @@ -1032,7 +1032,7 @@ return; } spl_filesystem_object_get_file_name(intern TSRMLS_CC); - if (!allow_links) { + if (!allow_links !(intern-flags SPL_FILE_DIR_FOLLOW_SYMLINKS)) { php_stat(intern-file_name, intern-file_name_len, FS_IS_LINK, return_value TSRMLS_CC); if (zend_is_true(return_value)) { RETURN_BOOL(0); @@ -2354,6 +2354,7 @@ REGISTER_SPL_CLASS_CONST_LONG(RecursiveDirectoryIterator, CURRENT_AS_SELF, SPL_FILE_DIR_CURRENT_AS_SELF); REGISTER_SPL_CLASS_CONST_LONG(RecursiveDirectoryIterator, KEY_MODE_MASK, SPL_FILE_DIR_KEY_MODE_MASK); REGISTER_SPL_CLASS_CONST_LONG(RecursiveDirectoryIterator, KEY_AS_PATHNAME, SPL_FILE_DIR_KEY_AS_PATHNAME); + REGISTER_SPL_CLASS_CONST_LONG(RecursiveDirectoryIterator, FOLLOW_SYMLINKS, SPL_FILE_DIR_FOLLOW_SYMLINKS); REGISTER_SPL_CLASS_CONST_LONG(RecursiveDirectoryIterator, KEY_AS_FILENAME, SPL_FILE_DIR_KEY_AS_FILENAME); REGISTER_SPL_CLASS_CONST_LONG(RecursiveDirectoryIterator, NEW_CURRENT_AND_KEY, SPL_FILE_DIR_KEY_AS_FILENAME|SPL_FILE_DIR_CURRENT_AS_FILEINFO); http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_directory.h?r1=1.12.2.5.2.11r2=1.12.2.5.2.12diff_format=u Index: php-src/ext/spl/spl_directory.h diff -u php-src/ext/spl/spl_directory.h:1.12.2.5.2.11 php-src/ext/spl/spl_directory.h:1.12.2.5.2.12 --- php-src/ext/spl/spl_directory.h:1.12.2.5.2.11 Wed Dec 31 11:17:44 2008 +++ php-src/ext/spl/spl_directory.h Wed Jul 8 03:08:03 2009 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: spl_directory.h,v 1.12.2.5.2.11 2008/12/31 11:17:44 sebastian Exp $ */ +/* $Id: spl_directory.h,v 1.12.2.5.2.12 2009/07/08 03:08:03 iliaa Exp $ */ #ifndef SPL_DIRECTORY_H #define SPL_DIRECTORY_H @@ -101,6 +101,7 @@ #define SPL_FILE_DIR_KEY_AS_PATHNAME 0x /* make RecursiveDirectoryTree::key() return getPathname() */ #define SPL_FILE_DIR_KEY_AS_FILENAME 0x0100 /* make RecursiveDirectoryTree::key() return getFilename() */ +#define SPL_FILE_DIR_FOLLOW_SYMLINKS 0x0200 /* make RecursiveDirectoryTree::hasChildren() follow symlinks */ #define SPL_FILE_DIR_KEY_MODE_MASK 0x0F00 /* mask RecursiveDirectoryTree::key() */ #define SPL_FILE_DIR_KEY(intern,mode) ((intern-flagsSPL_FILE_DIR_KEY_MODE_MASK)==mode) -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src(PHP_5_2) /ext/spl spl_directory.c
colder Sat May 3 16:00:40 2008 UTC Modified files: (Branch: PHP_5_2) /php-src/ext/splspl_directory.c Log: MFB: Fix #44838 (static class reference restricting overwriting) http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_directory.c?r1=1.45.2.27.2.26r2=1.45.2.27.2.27diff_format=u Index: php-src/ext/spl/spl_directory.c diff -u php-src/ext/spl/spl_directory.c:1.45.2.27.2.26 php-src/ext/spl/spl_directory.c:1.45.2.27.2.27 --- php-src/ext/spl/spl_directory.c:1.45.2.27.2.26 Wed Feb 13 12:23:26 2008 +++ php-src/ext/spl/spl_directory.c Sat May 3 16:00:40 2008 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: spl_directory.c,v 1.45.2.27.2.26 2008/02/13 12:23:26 helly Exp $ */ +/* $Id: spl_directory.c,v 1.45.2.27.2.27 2008/05/03 16:00:40 colder Exp $ */ #ifdef HAVE_CONFIG_H # include config.h @@ -1055,7 +1055,7 @@ INIT_PZVAL(zpath); ZVAL_STRINGL(zpath, intern-file_name, intern-file_name_len, 0); - spl_instantiate_arg_ex1(spl_ce_RecursiveDirectoryIterator, return_value, 0, zpath TSRMLS_CC); + spl_instantiate_arg_ex1(Z_OBJCE_P(getThis()), return_value, 0, zpath TSRMLS_CC); subdir = (spl_filesystem_object*)zend_object_store_get_object(return_value TSRMLS_CC); if (subdir) { -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src(PHP_5_2) /ext/spl spl_directory.c
iliaa Sat Sep 22 15:55:36 2007 UTC Modified files: (Branch: PHP_5_2) /php-src/ext/splspl_directory.c Log: Improve check for filename (fixed coverity issue #355) http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_directory.c?r1=1.45.2.27.2.22r2=1.45.2.27.2.23diff_format=u Index: php-src/ext/spl/spl_directory.c diff -u php-src/ext/spl/spl_directory.c:1.45.2.27.2.22 php-src/ext/spl/spl_directory.c:1.45.2.27.2.23 --- php-src/ext/spl/spl_directory.c:1.45.2.27.2.22 Tue Aug 21 22:45:53 2007 +++ php-src/ext/spl/spl_directory.c Sat Sep 22 15:55:35 2007 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: spl_directory.c,v 1.45.2.27.2.22 2007/08/21 22:45:53 johannes Exp $ */ +/* $Id: spl_directory.c,v 1.45.2.27.2.23 2007/09/22 15:55:35 iliaa Exp $ */ #ifdef HAVE_CONFIG_H # include config.h @@ -862,7 +862,7 @@ spl_filesystem_object_get_file_name(intern TSRMLS_CC); } - if (intern-file_name_len VCWD_REALPATH(intern-file_name, buff)) { + if (intern-file_name VCWD_REALPATH(intern-file_name, buff)) { #ifdef ZTS if (VCWD_ACCESS(buff, F_OK)) { RETVAL_FALSE; -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src(PHP_5_2) /ext/spl spl_directory.c
tony2001Tue Jun 5 12:02:46 2007 UTC Modified files: (Branch: PHP_5_2) /php-src/ext/splspl_directory.c Log: MFH http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_directory.c?r1=1.45.2.27.2.20r2=1.45.2.27.2.21diff_format=u Index: php-src/ext/spl/spl_directory.c diff -u php-src/ext/spl/spl_directory.c:1.45.2.27.2.20 php-src/ext/spl/spl_directory.c:1.45.2.27.2.21 --- php-src/ext/spl/spl_directory.c:1.45.2.27.2.20 Mon Apr 9 15:34:55 2007 +++ php-src/ext/spl/spl_directory.c Tue Jun 5 12:02:46 2007 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: spl_directory.c,v 1.45.2.27.2.20 2007/04/09 15:34:55 dmitry Exp $ */ +/* $Id: spl_directory.c,v 1.45.2.27.2.21 2007/06/05 12:02:46 tony2001 Exp $ */ #ifdef HAVE_CONFIG_H # include config.h @@ -829,7 +829,11 @@ php_set_error_handling(EH_THROW, spl_ce_RuntimeException TSRMLS_CC); +#ifdef HAVE_SYMLINK ret = readlink(intern-file_name, buff, MAXPATHLEN-1); +#else + ret = -1; /* always fail if not implemented */ +#endif if (ret == -1) { zend_throw_exception_ex(spl_ce_RuntimeException, 0 TSRMLS_CC, Unable to read link %s, error: %s, intern-file_name, strerror(errno)); -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src(PHP_5_2) /ext/spl spl_directory.c
dmitry Mon Apr 9 15:34:55 2007 UTC Modified files: (Branch: PHP_5_2) /php-src/ext/splspl_directory.c Log: Fixed 64-bit support http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_directory.c?r1=1.45.2.27.2.19r2=1.45.2.27.2.20diff_format=u Index: php-src/ext/spl/spl_directory.c diff -u php-src/ext/spl/spl_directory.c:1.45.2.27.2.19 php-src/ext/spl/spl_directory.c:1.45.2.27.2.20 --- php-src/ext/spl/spl_directory.c:1.45.2.27.2.19 Sun Mar 4 14:01:06 2007 +++ php-src/ext/spl/spl_directory.c Mon Apr 9 15:34:55 2007 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: spl_directory.c,v 1.45.2.27.2.19 2007/03/04 14:01:06 helly Exp $ */ +/* $Id: spl_directory.c,v 1.45.2.27.2.20 2007/04/09 15:34:55 dmitry Exp $ */ #ifdef HAVE_CONFIG_H # include config.h @@ -595,7 +595,8 @@ { spl_filesystem_object *intern = (spl_filesystem_object*)zend_object_store_get_object(getThis() TSRMLS_CC); char *fname, *suffix = 0; - int flen, slen = 0; + size_t flen; + int slen = 0; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, |s, suffix, slen) == FAILURE) { return; @@ -621,7 +622,8 @@ { spl_filesystem_object *intern = (spl_filesystem_object*)zend_object_store_get_object(getThis() TSRMLS_CC); char *suffix = 0, *fname; - int slen = 0, flen; + int slen = 0; + size_t flen; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, |s, suffix, slen) == FAILURE) { return; -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src(PHP_5_2) /ext/spl spl_directory.c spl_iterators.c /ext/spl/internal parentiterator.inc
helly Sun Mar 4 12:18:02 2007 UTC Modified files: (Branch: PHP_5_2) /php-src/ext/splspl_directory.c spl_iterators.c /php-src/ext/spl/internal parentiterator.inc Log: - MFH simplify, synch docu/implementation http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_directory.c?r1=1.45.2.27.2.17r2=1.45.2.27.2.18diff_format=u Index: php-src/ext/spl/spl_directory.c diff -u php-src/ext/spl/spl_directory.c:1.45.2.27.2.17 php-src/ext/spl/spl_directory.c:1.45.2.27.2.18 --- php-src/ext/spl/spl_directory.c:1.45.2.27.2.17 Sat Mar 3 15:08:59 2007 +++ php-src/ext/spl/spl_directory.c Sun Mar 4 12:18:02 2007 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: spl_directory.c,v 1.45.2.27.2.17 2007/03/03 15:08:59 helly Exp $ */ +/* $Id: spl_directory.c,v 1.45.2.27.2.18 2007/03/04 12:18:02 helly Exp $ */ #ifdef HAVE_CONFIG_H # include config.h @@ -448,6 +448,18 @@ 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_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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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; http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_iterators.c?r1=1.73.2.30.2.25r2=1.73.2.30.2.26diff_format=u Index: php-src/ext/spl/spl_iterators.c diff -u php-src/ext/spl/spl_iterators.c:1.73.2.30.2.25 php-src/ext/spl/spl_iterators.c:1.73.2.30.2.26 --- php-src/ext/spl/spl_iterators.c:1.73.2.30.2.25 Tue Feb 27 03:28:16 2007 +++ php-src/ext/spl/spl_iterators.c Sun Mar 4 12:18:02 2007 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: spl_iterators.c,v 1.73.2.30.2.25 2007/02/27 03:28:16 iliaa Exp $ */ +/* $Id: spl_iterators.c,v 1.73.2.30.2.26 2007/03/04 12:18:02 helly Exp $ */ #ifdef HAVE_CONFIG_H # include config.h @@ -1336,41 +1336,6 @@ spl_dual_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, spl_ce_ParentIterator,
[PHP-CVS] cvs: php-src(PHP_5_2) /ext/spl spl_directory.c spl_iterators.c
helly Sun Mar 4 14:01:06 2007 UTC Modified files: (Branch: PHP_5_2) /php-src/ext/splspl_directory.c spl_iterators.c Log: - Fix copy'n'paste issues http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_directory.c?r1=1.45.2.27.2.18r2=1.45.2.27.2.19diff_format=u Index: php-src/ext/spl/spl_directory.c diff -u php-src/ext/spl/spl_directory.c:1.45.2.27.2.18 php-src/ext/spl/spl_directory.c:1.45.2.27.2.19 --- php-src/ext/spl/spl_directory.c:1.45.2.27.2.18 Sun Mar 4 12:18:02 2007 +++ php-src/ext/spl/spl_directory.c Sun Mar 4 14:01:06 2007 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: spl_directory.c,v 1.45.2.27.2.18 2007/03/04 12:18:02 helly Exp $ */ +/* $Id: spl_directory.c,v 1.45.2.27.2.19 2007/03/04 14:01:06 helly Exp $ */ #ifdef HAVE_CONFIG_H # include config.h @@ -1286,7 +1286,7 @@ 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 (spl_filesystem_is_dot(intern-u.dir.entry.d_name)); + } while (spl_filesystem_is_dot(object-u.dir.entry.d_name)); if (object-file_name) { efree(object-file_name); object-file_name = NULL; @@ -1312,7 +1312,7 @@ 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 (spl_filesystem_is_dot(intern-u.dir.entry.d_name)); + } while (spl_filesystem_is_dot(object-u.dir.entry.d_name)); if (iterator-current) { zval_ptr_dtor(iterator-current); iterator-current = NULL; http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_iterators.c?r1=1.73.2.30.2.26r2=1.73.2.30.2.27diff_format=u Index: php-src/ext/spl/spl_iterators.c diff -u php-src/ext/spl/spl_iterators.c:1.73.2.30.2.26 php-src/ext/spl/spl_iterators.c:1.73.2.30.2.27 --- php-src/ext/spl/spl_iterators.c:1.73.2.30.2.26 Sun Mar 4 12:18:02 2007 +++ php-src/ext/spl/spl_iterators.c Sun Mar 4 14:01:06 2007 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: spl_iterators.c,v 1.73.2.30.2.26 2007/03/04 12:18:02 helly Exp $ */ +/* $Id: spl_iterators.c,v 1.73.2.30.2.27 2007/03/04 14:01:06 helly Exp $ */ #ifdef HAVE_CONFIG_H # include config.h @@ -1688,9 +1688,9 @@ ZEND_END_ARG_INFO(); static zend_function_entry spl_funcs_RecursiveRegexIterator[] = { - SPL_ME(RecursiveRegexIterator, __construct, arginfo_rec_regex_it___construct, ZEND_ACC_PUBLIC) - SPL_ME(ParentIterator, hasChildren, NULL, ZEND_ACC_PUBLIC) - SPL_ME(RecursiveRegexIterator, getChildren, NULL, ZEND_ACC_PUBLIC) + SPL_ME(RecursiveRegexIterator, __construct, arginfo_rec_regex_it___construct, ZEND_ACC_PUBLIC) + SPL_ME(RecursiveFilterIterator, hasChildren, NULL, ZEND_ACC_PUBLIC) + SPL_ME(RecursiveRegexIterator, getChildren, NULL, ZEND_ACC_PUBLIC) {NULL, NULL, NULL} }; #endif -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src(PHP_5_2) /ext/spl spl_directory.c
helly Tue Feb 20 13:08:01 2007 UTC Modified files: (Branch: PHP_5_2) /php-src/ext/splspl_directory.c Log: - Make stat based functions throw an exception http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_directory.c?r1=1.45.2.27.2.14r2=1.45.2.27.2.15diff_format=u Index: php-src/ext/spl/spl_directory.c diff -u php-src/ext/spl/spl_directory.c:1.45.2.27.2.14 php-src/ext/spl/spl_directory.c:1.45.2.27.2.15 --- php-src/ext/spl/spl_directory.c:1.45.2.27.2.14 Mon Feb 19 20:34:29 2007 +++ php-src/ext/spl/spl_directory.c Tue Feb 20 13:08:01 2007 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: spl_directory.c,v 1.45.2.27.2.14 2007/02/19 20:34:29 helly Exp $ */ +/* $Id: spl_directory.c,v 1.45.2.27.2.15 2007/02/20 13:08:01 helly Exp $ */ #ifdef HAVE_CONFIG_H # include config.h @@ -679,8 +679,10 @@ { \ spl_filesystem_object *intern = (spl_filesystem_object*)zend_object_store_get_object(getThis() TSRMLS_CC); \ \ + php_set_error_handling(EH_THROW, spl_ce_RuntimeException TSRMLS_CC);\ spl_filesystem_object_get_file_name(intern TSRMLS_CC); \ php_stat(intern-file_name, intern-file_name_len, func_num, return_value TSRMLS_CC); \ + php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);\ } /* }}} */ -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src(PHP_5_2) /ext/spl spl_directory.c spl_iterators.c
bjori Mon Nov 6 23:20:11 2006 UTC Modified files: (Branch: PHP_5_2) /php-src/ext/splspl_iterators.c spl_directory.c Log: MFH: arginfo fixes http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_iterators.c?r1=1.73.2.30.2.18r2=1.73.2.30.2.19diff_format=u Index: php-src/ext/spl/spl_iterators.c diff -u php-src/ext/spl/spl_iterators.c:1.73.2.30.2.18 php-src/ext/spl/spl_iterators.c:1.73.2.30.2.19 --- php-src/ext/spl/spl_iterators.c:1.73.2.30.2.18 Fri Nov 3 14:11:23 2006 +++ php-src/ext/spl/spl_iterators.c Mon Nov 6 23:20:11 2006 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: spl_iterators.c,v 1.73.2.30.2.18 2006/11/03 14:11:23 bjori Exp $ */ +/* $Id: spl_iterators.c,v 1.73.2.30.2.19 2006/11/06 23:20:11 bjori Exp $ */ #ifdef HAVE_CONFIG_H # include config.h @@ -748,18 +748,19 @@ /* }}} */ static -ZEND_BEGIN_ARG_INFO(arginfo_recursive_it___construct, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_recursive_it___construct, 0, 0, 1) ZEND_ARG_OBJ_INFO(0, iterator, Traversable, 0) ZEND_ARG_INFO(0, mode) + ZEND_ARG_INFO(0, flags) ZEND_END_ARG_INFO(); static -ZEND_BEGIN_ARG_INFO(arginfo_recursive_it_getSubIterator, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_recursive_it_getSubIterator, 0, 0, 0) ZEND_ARG_INFO(0, level) ZEND_END_ARG_INFO(); static -ZEND_BEGIN_ARG_INFO(arginfo_recursive_it_setMaxDepth, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_recursive_it_setMaxDepth, 0, 0, 0) ZEND_ARG_INFO(0, max_depth) ZEND_END_ARG_INFO(); @@ -1528,7 +1529,7 @@ } } /* }}} */ -/* {{{ proto bool RegexIterator::setFlags(int new_flags) +/* {{{ proto bool RegexIterator::setPregFlags(int new_flags) Set PREG flags */ SPL_METHOD(RegexIterator, setPregFlags) { @@ -1862,7 +1863,7 @@ }; static -ZEND_BEGIN_ARG_INFO(arginfo_limit_it___construct, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_limit_it___construct, 0, 0, 1) ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0) ZEND_ARG_INFO(0, offset) ZEND_ARG_INFO(0, count) @@ -2197,7 +2198,7 @@ } /* }}} */ -/* {{{ proto void CachingIterator::setFlags() +/* {{{ proto void CachingIterator::setFlags(int flags) Set the internal flags */ SPL_METHOD(CachingIterator, setFlags) { @@ -2231,7 +2232,7 @@ /* }}} */ static -ZEND_BEGIN_ARG_INFO(arginfo_caching_it___construct, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_caching_it___construct, 0, 0, 1) ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0) ZEND_ARG_INFO(0, flags) ZEND_END_ARG_INFO(); @@ -2242,12 +2243,12 @@ ZEND_END_ARG_INFO(); static -ZEND_BEGIN_ARG_INFO_EX(arginfo_caching_it_offsetGet, 0, 0, 1) +ZEND_BEGIN_ARG_INFO(arginfo_caching_it_offsetGet, 0) ZEND_ARG_INFO(0, index) ZEND_END_ARG_INFO(); static -ZEND_BEGIN_ARG_INFO_EX(arginfo_caching_it_offsetSet, 0, 0, 2) +ZEND_BEGIN_ARG_INFO(arginfo_caching_it_offsetSet, 0) ZEND_ARG_INFO(0, index) ZEND_ARG_INFO(0, newval) ZEND_END_ARG_INFO(); @@ -2306,7 +2307,7 @@ } /* }}} */ static -ZEND_BEGIN_ARG_INFO_EX(arginfo_caching_rec_it___construct, 0, ZEND_RETURN_VALUE, 2) +ZEND_BEGIN_ARG_INFO_EX(arginfo_caching_rec_it___construct, 0, ZEND_RETURN_VALUE, 1) ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0) ZEND_ARG_INFO(0, flags) ZEND_END_ARG_INFO(); http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_directory.c?r1=1.45.2.27.2.9r2=1.45.2.27.2.10diff_format=u Index: php-src/ext/spl/spl_directory.c diff -u php-src/ext/spl/spl_directory.c:1.45.2.27.2.9 php-src/ext/spl/spl_directory.c:1.45.2.27.2.10 --- php-src/ext/spl/spl_directory.c:1.45.2.27.2.9 Mon Nov 6 15:21:45 2006 +++ php-src/ext/spl/spl_directory.c Mon Nov 6 23:20:11 2006 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: spl_directory.c,v 1.45.2.27.2.9 2006/11/06 15:21:45 bjori Exp $ */ +/* $Id: spl_directory.c,v 1.45.2.27.2.10 2006/11/06 23:20:11 bjori Exp $ */ #ifdef HAVE_CONFIG_H # include config.h @@ -1327,18 +1327,23 @@ }; static -ZEND_BEGIN_ARG_INFO(arginfo_r_dir___construct, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_r_dir___construct, 0, 0, 1) ZEND_ARG_INFO(0, path) ZEND_ARG_INFO(0, flags) ZEND_END_ARG_INFO() +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_r_dir_hasChildren, 0, 0, 0) + ZEND_ARG_INFO(0, allow_links) +ZEND_END_ARG_INFO() + static zend_function_entry spl_RecursiveDirectoryIterator_functions[] = { SPL_ME(RecursiveDirectoryIterator, __construct, arginfo_r_dir___construct, ZEND_ACC_PUBLIC) SPL_ME(RecursiveDirectoryIterator, rewind,NULL, ZEND_ACC_PUBLIC) SPL_ME(RecursiveDirectoryIterator, next, NULL, ZEND_ACC_PUBLIC) SPL_ME(RecursiveDirectoryIterator, key, NULL, ZEND_ACC_PUBLIC) SPL_ME(RecursiveDirectoryIterator, current, NULL, ZEND_ACC_PUBLIC) - SPL_ME(RecursiveDirectoryIterator, hasChildren, NULL, ZEND_ACC_PUBLIC) +
[PHP-CVS] cvs: php-src(PHP_5_2) /ext/spl spl_directory.c
tony2001Fri Sep 29 12:18:58 2006 UTC Modified files: (Branch: PHP_5_2) /php-src/ext/splspl_directory.c Log: MFH http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_directory.c?r1=1.45.2.27.2.5r2=1.45.2.27.2.6diff_format=u Index: php-src/ext/spl/spl_directory.c diff -u php-src/ext/spl/spl_directory.c:1.45.2.27.2.5 php-src/ext/spl/spl_directory.c:1.45.2.27.2.6 --- php-src/ext/spl/spl_directory.c:1.45.2.27.2.5 Sun Aug 6 13:47:51 2006 +++ php-src/ext/spl/spl_directory.c Fri Sep 29 12:18:58 2006 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: spl_directory.c,v 1.45.2.27.2.5 2006/08/06 13:47:51 helly Exp $ */ +/* $Id: spl_directory.c,v 1.45.2.27.2.6 2006/09/29 12:18:58 tony2001 Exp $ */ #ifdef HAVE_CONFIG_H # include config.h @@ -2224,12 +2224,12 @@ REGISTER_SPL_IMPLEMENTS(SplFileObject, RecursiveIterator); REGISTER_SPL_IMPLEMENTS(SplFileObject, SeekableIterator); - REGISTER_SPL_SUB_CLASS_EX(SplTempFileObject, SplFileObject, spl_filesystem_object_new, spl_SplTempFileObject_functions); - REGISTER_SPL_CLASS_CONST_LONG(SplFileObject, DROP_NEW_LINE, SPL_FILE_OBJECT_DROP_NEW_LINE); REGISTER_SPL_CLASS_CONST_LONG(SplFileObject, READ_AHEAD, SPL_FILE_OBJECT_READ_AHEAD); REGISTER_SPL_CLASS_CONST_LONG(SplFileObject, SKIP_EMPTY, SPL_FILE_OBJECT_SKIP_EMPTY); REGISTER_SPL_CLASS_CONST_LONG(SplFileObject, READ_CSV, SPL_FILE_OBJECT_READ_CSV); + + REGISTER_SPL_SUB_CLASS_EX(SplTempFileObject, SplFileObject, spl_filesystem_object_new, spl_SplTempFileObject_functions); return SUCCESS; } /* }}} */ -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src(PHP_5_2) /ext/spl spl_directory.c
bjori Fri Sep 29 12:29:21 2006 UTC Modified files: (Branch: PHP_5_2) /php-src/ext/splspl_directory.c Log: fix arginfo http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_directory.c?r1=1.45.2.27.2.6r2=1.45.2.27.2.7diff_format=u Index: php-src/ext/spl/spl_directory.c diff -u php-src/ext/spl/spl_directory.c:1.45.2.27.2.6 php-src/ext/spl/spl_directory.c:1.45.2.27.2.7 --- php-src/ext/spl/spl_directory.c:1.45.2.27.2.6 Fri Sep 29 12:18:58 2006 +++ php-src/ext/spl/spl_directory.c Fri Sep 29 12:29:21 2006 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: spl_directory.c,v 1.45.2.27.2.6 2006/09/29 12:18:58 tony2001 Exp $ */ +/* $Id: spl_directory.c,v 1.45.2.27.2.7 2006/09/29 12:29:21 bjori Exp $ */ #ifdef HAVE_CONFIG_H # include config.h @@ -2182,7 +2182,7 @@ }; static -ZEND_BEGIN_ARG_INFO_EX(arginfo_temp_file_object___construct, 0, 0, 1) +ZEND_BEGIN_ARG_INFO_EX(arginfo_temp_file_object___construct, 0, 0, 0) ZEND_ARG_INFO(0, max_memory) ZEND_END_ARG_INFO() -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src(PHP_5_2) /ext/spl spl_directory.c /ext/standard streamsfuncs.c
bjori Fri Sep 29 13:11:28 2006 UTC Modified files: (Branch: PHP_5_2) /php-src/ext/standard streamsfuncs.c /php-src/ext/splspl_directory.c Log: fix protos http://cvs.php.net/viewvc.cgi/php-src/ext/standard/streamsfuncs.c?r1=1.58.2.6.2.6r2=1.58.2.6.2.7diff_format=u Index: php-src/ext/standard/streamsfuncs.c diff -u php-src/ext/standard/streamsfuncs.c:1.58.2.6.2.6 php-src/ext/standard/streamsfuncs.c:1.58.2.6.2.7 --- php-src/ext/standard/streamsfuncs.c:1.58.2.6.2.6Mon Sep 11 14:52:21 2006 +++ php-src/ext/standard/streamsfuncs.c Fri Sep 29 13:11:27 2006 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: streamsfuncs.c,v 1.58.2.6.2.6 2006/09/11 14:52:21 iliaa Exp $ */ +/* $Id: streamsfuncs.c,v 1.58.2.6.2.7 2006/09/29 13:11:27 bjori Exp $ */ #include php.h #include php_globals.h @@ -450,7 +450,7 @@ } /* }}} */ -/* {{{ proto resource stream_get_meta_data(resource fp) +/* {{{ proto array stream_get_meta_data(resource fp) Retrieves header/meta data from streams/file pointers */ PHP_FUNCTION(stream_get_meta_data) { http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_directory.c?r1=1.45.2.27.2.7r2=1.45.2.27.2.8diff_format=u Index: php-src/ext/spl/spl_directory.c diff -u php-src/ext/spl/spl_directory.c:1.45.2.27.2.7 php-src/ext/spl/spl_directory.c:1.45.2.27.2.8 --- php-src/ext/spl/spl_directory.c:1.45.2.27.2.7 Fri Sep 29 12:29:21 2006 +++ php-src/ext/spl/spl_directory.c Fri Sep 29 13:11:28 2006 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: spl_directory.c,v 1.45.2.27.2.7 2006/09/29 12:29:21 bjori Exp $ */ +/* $Id: spl_directory.c,v 1.45.2.27.2.8 2006/09/29 13:11:28 bjori Exp $ */ #ifdef HAVE_CONFIG_H # include config.h @@ -1605,7 +1605,7 @@ php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC); } /* }}} */ -/* {{{ proto void SplFileObject::__construct([int max_memory]) +/* {{{ proto void SplTempFileObject::__construct([int max_memory]) Construct a new temp file object */ SPL_METHOD(SplTempFileObject, __construct) { -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src(PHP_5_2) /ext/spl spl_directory.c /ext/spl/tests fileobject_003.phpt
helly Sat Jul 15 13:01:59 2006 UTC Modified files: (Branch: PHP_5_2) /php-src/ext/splspl_directory.c /php-src/ext/spl/tests fileobject_003.phpt Log: - MFH Fix issue with SplFileObject and directories http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_directory.c?r1=1.45.2.27.2.2r2=1.45.2.27.2.3diff_format=u Index: php-src/ext/spl/spl_directory.c diff -u php-src/ext/spl/spl_directory.c:1.45.2.27.2.2 php-src/ext/spl/spl_directory.c:1.45.2.27.2.3 --- php-src/ext/spl/spl_directory.c:1.45.2.27.2.2 Mon Jul 10 15:47:58 2006 +++ php-src/ext/spl/spl_directory.c Sat Jul 15 13:01:59 2006 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: spl_directory.c,v 1.45.2.27.2.2 2006/07/10 15:47:58 dmitry Exp $ */ +/* $Id: spl_directory.c,v 1.45.2.27.2.3 2006/07/15 13:01:59 helly Exp $ */ #ifdef HAVE_CONFIG_H # include config.h @@ -205,9 +205,9 @@ intern-u.file.context = php_stream_context_from_zval(intern-u.file.zcontext, 0); intern-u.file.stream = php_stream_open_wrapper_ex(intern-file_name, intern-u.file.open_mode, (use_include_path ? USE_PATH : 0) | ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL, intern-u.file.context); - if (intern-u.file.stream == NULL) { + if (!intern-file_name_len || !intern-u.file.stream) { if (!EG(exception)) { - zend_throw_exception_ex(spl_ce_RuntimeException, 0 TSRMLS_CC, Cannot open file %s, intern-file_name); + zend_throw_exception_ex(spl_ce_RuntimeException, 0 TSRMLS_CC, Cannot open file '%s', intern-file_name_len ? intern-file_name : ); } intern-file_name = NULL; /* until here it is not a copy */ intern-u.file.open_mode = NULL; @@ -218,6 +218,14 @@ zend_list_addref(Z_RESVAL_P(intern-u.file.zcontext)); } + if (intern-file_name[intern-file_name_len-1] == '/' +#if defined(PHP_WIN32) || defined(NETWARE) + ||intern-file_name[intern-file_name_len-1] == '\\' +#endif + ) { + intern-file_name_len--; + } + intern-file_name = estrndup(intern-file_name, intern-file_name_len); intern-u.file.open_mode = estrndup(intern-u.file.open_mode, intern-u.file.open_mode_len); http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/fileobject_003.phpt?r1=1.1.2.2r2=1.1.2.3diff_format=u Index: php-src/ext/spl/tests/fileobject_003.phpt diff -u php-src/ext/spl/tests/fileobject_003.phpt:1.1.2.2 php-src/ext/spl/tests/fileobject_003.phpt:1.1.2.3 --- php-src/ext/spl/tests/fileobject_003.phpt:1.1.2.2 Sat Jul 8 12:25:57 2006 +++ php-src/ext/spl/tests/fileobject_003.phpt Sat Jul 15 13:01:59 2006 @@ -5,7 +5,7 @@ --FILE-- ?php -function test($name) +function test($name, $lc, $lp) { static $i = 0; echo ===$i===\n; @@ -19,10 +19,23 @@ var_dump($o === $c); var_dump($o == $c); var_dump($o-getPathname() == $c-getPathname()); + + $f = new SplFileObject($name); + var_dump($name); + var_dump($f-getPathName()); + $l = substr($f-getPathName(), -1); + var_dump($l != '/' $l != '\\' $l == $lc); + var_dump($f-getFileName()); + $l = substr($f-getFileName(), -1); + var_dump($l != '/' $l != '\\' $l == $lc); + var_dump($f-getPath()); + $l = substr($f-getPath(), -1); + var_dump($l != '/' $l != '\\' $l == $lp); } -test(dirname(__FILE__) . '/' . 'fileobject_001a.txt'); -test(dirname(__FILE__) . '/'); +test(dirname(__FILE__) . '/' . 'fileobject_001a.txt', 't', substr(dirname(__FILE__),-1)); +test(dirname(__FILE__) . '/', substr(dirname(__FILE__),-1), 'l'); +test(dirname(__FILE__), substr(dirname(__FILE__),-1), 'l'); ? ===DONE=== @@ -36,6 +49,13 @@ bool(false) bool(true) bool(true) +string(%d) %sfileobject_001a.txt +string(%d) %sfileobject_001a.txt +bool(true) +string(%d) %sfileobject_001a.txt +bool(true) +string(%d) %stests +bool(true) ===1=== object(SplFileInfo)#%d (0) { } @@ -44,4 +64,26 @@ bool(false) bool(true) bool(true) +string(%d) %stests/ +string(%d) %stests +bool(true) +string(%d) %stests +bool(true) +string(%d) %sspl +bool(true) +===2=== +object(SplFileInfo)#1 (0) { +} +object(SplFileInfo)#2 (0) { +} +bool(false) +bool(true) +bool(true) +string(%d) %stests +string(%d) %stests +bool(true) +string(%d) %stests +bool(true) +string(%d) %sspl +bool(true) ===DONE=== -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src(PHP_5_2) /ext/spl spl_directory.c
dmitry Mon Jul 10 15:47:58 2006 UTC Modified files: (Branch: PHP_5_2) /php-src/ext/splspl_directory.c Log: Fixed memory leaks in ext/spl/tests/fileobject_003.phpt http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_directory.c?r1=1.45.2.27.2.1r2=1.45.2.27.2.2diff_format=u Index: php-src/ext/spl/spl_directory.c diff -u php-src/ext/spl/spl_directory.c:1.45.2.27.2.1 php-src/ext/spl/spl_directory.c:1.45.2.27.2.2 --- php-src/ext/spl/spl_directory.c:1.45.2.27.2.1 Wed May 10 00:31:04 2006 +++ php-src/ext/spl/spl_directory.c Mon Jul 10 15:47:58 2006 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: spl_directory.c,v 1.45.2.27.2.1 2006/05/10 00:31:04 helly Exp $ */ +/* $Id: spl_directory.c,v 1.45.2.27.2.2 2006/07/10 15:47:58 dmitry Exp $ */ #ifdef HAVE_CONFIG_H # include config.h @@ -254,8 +254,8 @@ switch (source-type) { case SPL_FS_INFO: - source-path_len = source-path_len; - source-path = estrndup(source-path, source-path_len); + intern-path_len = source-path_len; + intern-path = estrndup(source-path, source-path_len); intern-file_name_len = source-file_name_len; intern-file_name = estrndup(source-file_name, intern-file_name_len); break; -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src(PHP_5_2) /ext/spl spl_directory.c spl_directory.h
helly Wed May 10 00:31:04 2006 UTC Modified files: (Branch: PHP_5_2) /php-src/ext/splspl_directory.c spl_directory.h Log: - MFH: SplFileObject improvements . FILE_OBJECT_READ_AHEAD: allow to read ahead . FILE_OBJECT_SKIP_EMPTY: allow to skip empty lines (includes read ahead) . FILE_OBJECT_READ_CSV: allow to read as csv http://cvs.php.net/viewcvs.cgi/php-src/ext/spl/spl_directory.c?r1=1.45.2.27r2=1.45.2.27.2.1diff_format=u Index: php-src/ext/spl/spl_directory.c diff -u php-src/ext/spl/spl_directory.c:1.45.2.27 php-src/ext/spl/spl_directory.c:1.45.2.27.2.1 --- php-src/ext/spl/spl_directory.c:1.45.2.27 Thu Apr 6 19:01:56 2006 +++ php-src/ext/spl/spl_directory.c Wed May 10 00:31:04 2006 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: spl_directory.c,v 1.45.2.27 2006/04/06 19:01:56 tony2001 Exp $ */ +/* $Id: spl_directory.c,v 1.45.2.27.2.1 2006/05/10 00:31:04 helly Exp $ */ #ifdef HAVE_CONFIG_H # include config.h @@ -990,10 +990,16 @@ }; /* {{{ spl_ce_dir_get_iterator */ -zend_object_iterator *spl_filesystem_dir_get_iterator(zend_class_entry *ce, zval *object TSRMLS_DC) +zend_object_iterator *spl_filesystem_dir_get_iterator(zend_class_entry *ce, zval *object, int by_ref TSRMLS_DC) { - spl_filesystem_dir_it *iterator = emalloc(sizeof(spl_filesystem_dir_it)); - spl_filesystem_object *dir_object = (spl_filesystem_object*)zend_object_store_get_object(object TSRMLS_CC); + spl_filesystem_dir_it *iterator; + spl_filesystem_object *dir_object; + + if (by_ref) { + zend_error(E_ERROR, An iterator cannot be used with foreach by reference); + } + iterator = emalloc(sizeof(spl_filesystem_dir_it)); + dir_object = (spl_filesystem_object*)zend_object_store_get_object(object TSRMLS_CC); object-refcount += 2;; iterator-intern.data = (void*)object; @@ -1195,10 +1201,16 @@ }; /* {{{ spl_ce_dir_get_iterator */ -zend_object_iterator *spl_filesystem_tree_get_iterator(zend_class_entry *ce, zval *object TSRMLS_DC) +zend_object_iterator *spl_filesystem_tree_get_iterator(zend_class_entry *ce, zval *object, int by_ref TSRMLS_DC) { - spl_filesystem_dir_it *iterator = emalloc(sizeof(spl_filesystem_dir_it)); - spl_filesystem_object *dir_object = (spl_filesystem_object*)zend_object_store_get_object(object TSRMLS_CC); + spl_filesystem_dir_it *iterator; + spl_filesystem_object *dir_object; + + if (by_ref) { + zend_error(E_ERROR, An iterator cannot be used with foreach by reference); + } + iterator = emalloc(sizeof(spl_filesystem_dir_it)); + dir_object = (spl_filesystem_object*)zend_object_store_get_object(object TSRMLS_CC); object-refcount++; iterator-intern.data = (void*)object; @@ -1211,14 +1223,10 @@ /* }}} */ /* {{{ spl_filesystem_object_cast */ -static int spl_filesystem_object_cast(zval *readobj, zval *writeobj, int type, int should_free TSRMLS_DC) +static int spl_filesystem_object_cast(zval *readobj, zval *writeobj, int type TSRMLS_DC) { spl_filesystem_object *intern = (spl_filesystem_object*)zend_object_store_get_object(readobj TSRMLS_CC); - if (should_free) { - zval_dtor(readobj); - } - if (type == IS_STRING) { switch (intern-type) { case SPL_FS_INFO: @@ -1374,19 +1382,89 @@ return SUCCESS; } /* }}} */ -static int spl_filesystem_file_read_line(zval * this_ptr, spl_filesystem_object *intern, int silent TSRMLS_DC) /* {{{ */ +static int spl_filesystem_file_call(spl_filesystem_object *intern, zend_function *func_ptr, int pass_num_args, zval *return_value, zval *arg2 TSRMLS_DC) /* {{{ */ +{ + zend_fcall_info fci; + zend_fcall_info_cache fcic; + zval z_fname; + zval * zresource_ptr = intern-u.file.zresource, *retval; + int result; + int num_args = pass_num_args + (arg2 ? 2 : 1); + + zval ***params = (zval***)safe_emalloc(num_args, sizeof(zval**), 0); + + params[0] = zresource_ptr; + + if (arg2) { + params[1] = arg2; + } + + zend_get_parameters_array_ex(pass_num_args, params+(arg2 ? 2 : 1)); + + ZVAL_STRING(z_fname, func_ptr-common.function_name, 0); + + fci.size = sizeof(fci); + fci.function_table = EG(function_table); + fci.object_pp = NULL; + fci.function_name = z_fname; + fci.retval_ptr_ptr = retval; + fci.param_count = num_args; + fci.params = params; + fci.no_separation = 1; + fci.symbol_table = NULL; + + fcic.initialized = 1; + fcic.function_handler = func_ptr; + fcic.calling_scope = NULL; + fcic.object_pp = NULL; + + result = zend_call_function(fci, fcic TSRMLS_CC); + + ZVAL_ZVAL(return_value, retval, 1, 1); + + efree(params); +