@@ -2616,19 +2616,26 @@ SPL_METHOD(SplFileObject, fgetcsv)
2616
2616
}
2617
2617
/* }}} */
2618
2618
2619
- /* {{{ proto int SplFileObject::fputcsv(array fields, [string delimiter [, string enclosure]])
2619
+ /* {{{ proto int SplFileObject::fputcsv(array fields, [string delimiter [, string enclosure [, string escape] ]])
2620
2620
Output a field array as a CSV line */
2621
2621
SPL_METHOD (SplFileObject , fputcsv )
2622
2622
{
2623
2623
spl_filesystem_object * intern = (spl_filesystem_object * )zend_object_store_get_object (getThis () TSRMLS_CC );
2624
2624
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 ;
2627
2627
zval * fields = NULL ;
2628
2628
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 ) {
2630
2630
switch (ZEND_NUM_ARGS ())
2631
2631
{
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 */
2632
2639
case 3 :
2633
2640
if (e_len != 1 ) {
2634
2641
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)
2946
2953
ZEND_ARG_INFO (0 , fields )
2947
2954
ZEND_ARG_INFO (0 , delimiter )
2948
2955
ZEND_ARG_INFO (0 , enclosure )
2956
+ ZEND_ARG_INFO (0 , escape )
2949
2957
ZEND_END_ARG_INFO ()
2950
2958
2951
2959
ZEND_BEGIN_ARG_INFO_EX (arginfo_file_object_flock , 0 , 0 , 1 )
0 commit comments