Output a field array as a CSV line */
SPL_METHOD(SplFileObject, fputcsv)
{
- spl_filesystem_object *intern = (spl_filesystem_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
+ spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(getThis());
char delimiter = intern->u.file.delimiter, enclosure = intern->u.file.enclosure, escape = intern->u.file.escape;
- char *delim = NULL, *enclo = NULL;
- size_t d_len = 0, e_len = 0;
+ char *delim = NULL, *enclo = NULL, *esc = NULL;
- int d_len = 0, e_len = 0, esc_len = 0, ret;
++ size_t d_len = 0, e_len = 0, esc_len = 0;
+ zend_long ret;
zval *fields = NULL;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|ss", &fields, &delim, &d_len, &enclo, &e_len) == SUCCESS) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|sss", &fields, &delim, &d_len, &enclo, &e_len, &esc, &esc_len) == SUCCESS) {
switch(ZEND_NUM_ARGS())
{
+ case 4:
+ if (esc_len != 1) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "escape must be a character");
+ RETURN_FALSE;
+ }
+ escape = esc[0];
+ /* no break */
case 3:
if (e_len != 1) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "enclosure must be a character");
--- /dev/null
- &object(ReflectionParameter)#2 (1) {
+ --TEST--
+ Bug #68479 (Escape parameter missing from SplFileObject::fputcsv)
+ --FILE--
+ <?php
+
+ $method = new ReflectionMethod('SplFileObject', 'fputcsv');
+ $params = $method->getParameters();
+ var_dump($params);
+
+ ?>
+ ===DONE===
+ --EXPECTF--
+ array(4) {
+ [0]=>
- &object(ReflectionParameter)#3 (1) {
++ object(ReflectionParameter)#2 (1) {
+ ["name"]=>
+ string(6) "fields"
+ }
+ [1]=>
- &object(ReflectionParameter)#4 (1) {
++ object(ReflectionParameter)#3 (1) {
+ ["name"]=>
+ string(9) "delimiter"
+ }
+ [2]=>
- &object(ReflectionParameter)#5 (1) {
++ object(ReflectionParameter)#4 (1) {
+ ["name"]=>
+ string(9) "enclosure"
+ }
+ [3]=>
-===DONE===
++ object(ReflectionParameter)#5 (1) {
+ ["name"]=>
+ string(6) "escape"
+ }
+ }
++===DONE===