cvs: php4 /ext/standard file.c /ext/standard/tests/general_functions 004.data 004.phpt
| From: | Hartmut Holzgraefe | Date: | Thu, 14 Dec 2000 14:18:36 +0000 |
| Subject: | cvs: php4 /ext/standard file.c /ext/standard/tests/general_functions 004.data 004.phpt | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-3150@lists.php.net to get a copy of this message | ||
hholzgra Thu Dec 14 06:18:36 2000 EDT
Added files:
/php4/ext/standard/tests/general_functions 004.phpt 004.data
Modified files:
/php4/ext/standard file.c
Log:
fgetcsv() will now work correct with empty fields in tab delimited files
# fix for bug #8258 and regression test
Index: php4/ext/standard/file.c
diff -u php4/ext/standard/file.c:1.127 php4/ext/standard/file.c:1.128
--- php4/ext/standard/file.c:1.127 Tue Dec 12 09:42:53 2000
+++ php4/ext/standard/file.c Thu Dec 14 06:18:35 2000
@@ -20,7 +20,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: file.c,v 1.127 2000/12/12 17:42:53 stas Exp $ */
+/* $Id: file.c,v 1.128 2000/12/14 14:18:35 hholzgra Exp $ */
/* Synced with php 3.0 revision 1.218 1999-06-16 [ssb] */
@@ -1741,7 +1741,7 @@
}
/* }}} */
-/* {{{ proto array fgetcsv(int fp, int length)
+/* {{{ proto array fgetcsv(int fp, int length [, string delimiter])
Get line from file pointer and parse for CSV fields */
PHP_FUNCTION(fgetcsv) {
@@ -1813,7 +1813,7 @@
lineEnd = emalloc(sizeof(char) * (len + 1));
bptr = buf;
tptr = buf + strlen(buf) -1;
- while ( isspace((int)*tptr) && (tptr > bptr) ) tptr--;
+ while ( isspace((int)*tptr) && (*tptr!=delimiter) && (tptr > bptr) )
tptr--;
tptr++;
strcpy(lineEnd, tptr);
@@ -1839,7 +1839,7 @@
do {
/* 1. Strip any leading space */
- while(isspace((int)*bptr)) bptr++;
+ while(isspace((int)*bptr) && (*bptr!=delimiter)) bptr++;
/* 2. Read field, leaving bptr pointing at start of next field */
if (*bptr == '"') {
/* 2A. handle quote delimited field */
@@ -1874,7 +1874,7 @@
}
bptr = buf;
tptr = buf + strlen(buf) -1;
- while ( isspace((int)*tptr) && (tptr >
bptr) ) tptr--;
+ while ( isspace((int)*tptr) &&
(*tptr!=delimiter) && (tptr > bptr) ) tptr--;
tptr++; strcpy(lineEnd, tptr);
*tptr++ = ' '; *tptr = 0;
@@ -1889,7 +1889,7 @@
*tptr=0; /* terminate temporary string */
if (strlen(temp)) {
tptr--;
- while (isspace((int)*tptr)) *tptr-- = 0; /* strip any trailing spaces */
+ while (isspace((int)*tptr) && (*tptr!=delimiter)) *tptr-- = 0; /* strip any trailing
spaces */
}
if (*bptr == delimiter) bptr++;
}
Index: php4/ext/standard/tests/general_functions/004.phpt
+++ php4/ext/standard/tests/general_functions/004.phpt
--TEST--
fgetcsv() with tab delimited fields (BUG #8258)
--POST--
--GET--
--FILE--
<?php
$fp=fopen("004.data","r");
while($a=fgetcsv($fp,100,"\t")) {
echo join(",",$a)."\n";
}
fclose($fp);
?>
--EXPECT--
name,value,comment
true,1,boolean true
false,0,boolean false
empty,,nothing
Index: php4/ext/standard/tests/general_functions/004.data
+++ php4/ext/standard/tests/general_functions/004.data
name value comment
true 1 boolean true
false 0 boolean false
empty nothing