@@ -2616,19 +2616,26 @@ SPL_METHOD(SplFileObject, fgetcsv)
26162616}
26172617/* }}} */
26182618
2619- /* {{{ proto int SplFileObject::fputcsv(array fields, [string delimiter [, string enclosure]])
2619+ /* {{{ proto int SplFileObject::fputcsv(array fields, [string delimiter [, string enclosure [, string escape] ]])
26202620 Output a field array as a CSV line */
26212621SPL_METHOD (SplFileObject , fputcsv )
26222622{
26232623 spl_filesystem_object * intern = (spl_filesystem_object * )zend_object_store_get_object (getThis () TSRMLS_CC );
26242624 char delimiter = intern -> u .file .delimiter , enclosure = intern -> u .file .enclosure , escape = intern -> u .file .escape ;
2625- char * delim = NULL , * enclo = NULL ;
2626- int d_len = 0 , e_len = 0 , ret ;
2625+ char * delim = NULL , * enclo = NULL , * esc = NULL ;
2626+ int d_len = 0 , e_len = 0 , esc_len = 0 , ret ;
26272627 zval * fields = NULL ;
26282628
2629- if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "a|ss " , & fields , & delim , & d_len , & enclo , & e_len ) == SUCCESS ) {
2629+ if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "a|sss " , & fields , & delim , & d_len , & enclo , & e_len , & esc , & esc_len ) == SUCCESS ) {
26302630 switch (ZEND_NUM_ARGS ())
26312631 {
2632+ case 4 :
2633+ if (esc_len != 1 ) {
2634+ php_error_docref (NULL TSRMLS_CC , E_WARNING , "escape must be a character" );
2635+ RETURN_FALSE ;
2636+ }
2637+ escape = esc [0 ];
2638+ /* no break */
26322639 case 3 :
26332640 if (e_len != 1 ) {
26342641 php_error_docref (NULL TSRMLS_CC , E_WARNING , "enclosure must be a character" );
@@ -2946,6 +2953,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_file_object_fputcsv, 0, 0, 1)
29462953 ZEND_ARG_INFO (0 , fields )
29472954 ZEND_ARG_INFO (0 , delimiter )
29482955 ZEND_ARG_INFO (0 , enclosure )
2956+ ZEND_ARG_INFO (0 , escape )
29492957ZEND_END_ARG_INFO ()
29502958
29512959ZEND_BEGIN_ARG_INFO_EX (arginfo_file_object_flock , 0 , 0 , 1 )
0 commit comments