[PHP-CVS] cvs: php-src(PHP_5_3) / NEWS /ext/spl spl_directory.c spl_directory.h

2009-07-07 Thread Ilia Alshanetsky
iliaa   Wed Jul  8 03:07:00 2009 UTC

  Modified files:  (Branch: PHP_5_3)
/php-src/ext/splspl_directory.c spl_directory.h 
/php-srcNEWS 
  Log:
  
  Fixed bug #48788 (RecursiveDirectoryIterator doesn't descend into symlinked
  directories).  
  
  [DOC] 
  
  To avoid breaking how existing code works a new constant is introduced for
  the RecursiveDirectoryIterator() that directs the code to follow symlinks.
  This constant RecursiveDirectoryIterator::FOLLOW_SYMLINKS can be passed a 
  flag to the constructor to trigger symlink following.
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_directory.c?r1=1.45.2.27.2.23.2.45&r2=1.45.2.27.2.23.2.46&diff_format=u
Index: php-src/ext/spl/spl_directory.c
diff -u php-src/ext/spl/spl_directory.c:1.45.2.27.2.23.2.45 
php-src/ext/spl/spl_directory.c:1.45.2.27.2.23.2.46
--- php-src/ext/spl/spl_directory.c:1.45.2.27.2.23.2.45 Sat Jul  4 20:31:27 2009
+++ php-src/ext/spl/spl_directory.c Wed Jul  8 03:06:58 2009
@@ -16,7 +16,7 @@
+--+
  */
 
-/* $Id: spl_directory.c,v 1.45.2.27.2.23.2.45 2009/07/04 20:31:27 felipe Exp $ 
*/
+/* $Id: spl_directory.c,v 1.45.2.27.2.23.2.46 2009/07/08 03:06:58 iliaa Exp $ 
*/
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -1246,7 +1246,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_FALSE;
@@ -2656,6 +2656,7 @@
REGISTER_SPL_CLASS_CONST_LONG(FilesystemIterator, "CURRENT_AS_SELF",
 SPL_FILE_DIR_CURRENT_AS_SELF);
REGISTER_SPL_CLASS_CONST_LONG(FilesystemIterator, "KEY_MODE_MASK",  
 SPL_FILE_DIR_KEY_MODE_MASK);
REGISTER_SPL_CLASS_CONST_LONG(FilesystemIterator, "KEY_AS_PATHNAME",
 SPL_FILE_DIR_KEY_AS_PATHNAME);
+   REGISTER_SPL_CLASS_CONST_LONG(FilesystemIterator, "FOLLOW_SYMLINKS",
 SPL_FILE_DIR_FOLLOW_SYMLINKS);
REGISTER_SPL_CLASS_CONST_LONG(FilesystemIterator, "KEY_AS_FILENAME",
 SPL_FILE_DIR_KEY_AS_FILENAME);
REGISTER_SPL_CLASS_CONST_LONG(FilesystemIterator, 
"NEW_CURRENT_AND_KEY", 
SPL_FILE_DIR_KEY_AS_FILENAME|SPL_FILE_DIR_CURRENT_AS_FILEINFO);
REGISTER_SPL_CLASS_CONST_LONG(FilesystemIterator, "SKIP_DOTS",  
 SPL_FILE_DIR_SKIPDOTS);
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_directory.h?r1=1.12.2.5.2.4.2.14&r2=1.12.2.5.2.4.2.15&diff_format=u
Index: php-src/ext/spl/spl_directory.h
diff -u php-src/ext/spl/spl_directory.h:1.12.2.5.2.4.2.14 
php-src/ext/spl/spl_directory.h:1.12.2.5.2.4.2.15
--- php-src/ext/spl/spl_directory.h:1.12.2.5.2.4.2.14   Thu Jun  4 14:46:26 2009
+++ php-src/ext/spl/spl_directory.h Wed Jul  8 03:06:59 2009
@@ -16,7 +16,7 @@
+--+
  */
 
-/* $Id: spl_directory.h,v 1.12.2.5.2.4.2.14 2009/06/04 14:46:26 colder Exp $ */
+/* $Id: spl_directory.h,v 1.12.2.5.2.4.2.15 2009/07/08 03:06:59 iliaa Exp $ */
 
 #ifndef SPL_DIRECTORY_H
 #define SPL_DIRECTORY_H
@@ -129,6 +129,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->flags&SPL_FILE_DIR_KEY_MODE_MASK)==mode)
 
http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.965.2.670&r2=1.2027.2.547.2.965.2.671&diff_format=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2027.2.547.2.965.2.670 
php-src/NEWS:1.2027.2.547.2.965.2.671
--- php-src/NEWS:1.2027.2.547.2.965.2.670   Tue Jul  7 22:17:54 2009
+++ php-src/NEWSWed Jul  8 03:06:59 2009
@@ -4,6 +4,8 @@
 - Fixed spl_autoload_unregister/spl_autoad_functions wrt. Closures and
   Functors. (Christian Seiler)
 
+- Fixed bug #48788 (RecursiveDirectoryIterator doesn't descend into symlinked
+  directories). (Ilia)
 - Fixed bug #48771 (rename() between volumes fails and reports no error on 
   Windows). (Pierre)
 - Fixed bug #48757 (ReflectionFunction::invoke() parameter issues). (Kalle)



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[PHP-CVS] cvs: php-src(PHP_5_3) / NEWS /ext/spl spl_directory.c spl_directory.h /ext/standard file.c file.h /ext/standard/tests/file bug40501.csv bug40501.phpt fgetcsv_error.phpt

2007-10-03 Thread David Soria Parra
dsp Wed Oct  3 10:44:32 2007 UTC

  Added files: (Branch: PHP_5_3)
/php-src/ext/standard/tests/filebug40501.csv bug40501.phpt 

  Modified files:  
/php-srcNEWS 
/php-src/ext/splspl_directory.c spl_directory.h 
/php-src/ext/standard   file.c file.h 
/php-src/ext/standard/tests/filefgetcsv_error.phpt 
  Log:
  MFH: Add an escape parameter to fgetcsv to satisfy rfc4180 and bug #40501.
  [DOC] 5th parameter available since PHP 5.3+
  
  http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.965.2.20&r2=1.2027.2.547.2.965.2.21&diff_format=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2027.2.547.2.965.2.20 
php-src/NEWS:1.2027.2.547.2.965.2.21
--- php-src/NEWS:1.2027.2.547.2.965.2.20Wed Oct  3 10:33:01 2007
+++ php-src/NEWSWed Oct  3 10:44:32 2007
@@ -1,6 +1,7 @@
 PHPNEWS
 |||
 ?? ??? 20??, PHP 5.3.0
+- Added optional escape character parameter to fgetcsv. (David Soria Parra)
 - Added xsl->setProfiling() for profiling stylesheets. (Christian)
 - Added long-option feature to getopt() and made getopt() available also on 
   win32 systems by adding a common getopt implementation into core.
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_directory.c?r1=1.45.2.27.2.23.2.1&r2=1.45.2.27.2.23.2.2&diff_format=u
Index: php-src/ext/spl/spl_directory.c
diff -u php-src/ext/spl/spl_directory.c:1.45.2.27.2.23.2.1 
php-src/ext/spl/spl_directory.c:1.45.2.27.2.23.2.2
--- php-src/ext/spl/spl_directory.c:1.45.2.27.2.23.2.1  Thu Sep 27 18:00:44 2007
+++ php-src/ext/spl/spl_directory.c Wed Oct  3 10:44:32 2007
@@ -16,7 +16,7 @@
+--+
  */
 
-/* $Id: spl_directory.c,v 1.45.2.27.2.23.2.1 2007/09/27 18:00:44 dmitry Exp $ 
*/
+/* $Id: spl_directory.c,v 1.45.2.27.2.23.2.2 2007/10/03 10:44:32 dsp Exp $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -1589,7 +1589,7 @@
spl_filesystem_file_call(intern, func_ptr, pass_num_args, return_value, 
arg2 TSRMLS_CC); \
 }
 
-static int spl_filesystem_file_read_csv(spl_filesystem_object *intern, char 
delimiter, char enclosure, zval *return_value TSRMLS_DC) /* {{{ */
+static int spl_filesystem_file_read_csv(spl_filesystem_object *intern, char 
delimiter, char enclosure, char escape, zval *return_value TSRMLS_DC) /* {{{ */
 {
int ret = SUCCESS;

@@ -1606,7 +1606,7 @@
}
ALLOC_INIT_ZVAL(intern->u.file.current_zval);
 
-   php_fgetcsv(intern->u.file.stream, delimiter, enclosure, 
buf_len, buf, intern->u.file.current_zval TSRMLS_CC);
+   php_fgetcsv(intern->u.file.stream, delimiter, enclosure, 
escape, buf_len, buf, intern->u.file.current_zval TSRMLS_CC);
if (return_value) {
if (Z_TYPE_P(return_value) != IS_NULL) {
zval_dtor(return_value);
@@ -1632,7 +1632,7 @@
return FAILURE;
}
if (intern->flags & SPL_FILE_OBJECT_READ_CSV) {
-   return spl_filesystem_file_read_csv(intern, 
intern->u.file.delimiter, intern->u.file.enclosure, NULL TSRMLS_CC);
+   return spl_filesystem_file_read_csv(intern, 
intern->u.file.delimiter, intern->u.file.enclosure, intern->u.file.escape, NULL 
TSRMLS_CC);
} else {
zend_call_method_with_0_params(&this_ptr, 
Z_OBJCE_P(getThis()), &intern->u.file.func_getCurr, "getCurrentLine", &retval);
}
@@ -1943,18 +1943,25 @@
 }
 /* }}} */
 
-/* {{{ proto array SplFileObject::fgetcsv([string delimiter [, string 
enclosure]])
+/* {{{ proto array SplFileObject::fgetcsv([string delimiter [, string 
enclosure [, escape = '\\']]])
Return current line as csv */
 SPL_METHOD(SplFileObject, fgetcsv)
 {
spl_filesystem_object *intern = 
(spl_filesystem_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
-   char delimiter = intern->u.file.delimiter, enclosure = 
intern->u.file.enclosure;
-   char *delim, *enclo;
-   int d_len, e_len;
+   char delimiter = intern->u.file.delimiter, enclosure = 
intern->u.file.enclosure, escape = intern->u.file.escape;
+   char *delim, *enclo, *esc;
+   int d_len, e_len, esc_len;

-   if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ss", &delim, 
&d_len, &enclo, &e_len) == SUCCESS) {
+   if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sss", &delim, 
&d_len, &enclo, &e_len, &esc, &esc_len) == SUCCESS) {
switch(ZEND_NUM_ARGS())
{
+   case 3:
+   if (esc_len != 1) {
+   php_error_docref(NULL TSRMLS_CC, 
E_WARNING, "escape must be a character");
+