iliaa Fri Dec 12 20:44:25 2003 EDT
Modified files: (Branch: PHP_4_3)
/php-src/ext/standard file.c
Log:
More fgetcsv() fixes.
Index: php-src/ext/standard/file.c
diff -u php-src/ext/standard/file.c:1.279.2.44 php-src/ext/standard/file.c:1.279.2.45
--- php-src/ext/standard/file.c:1.279.2.44 Fri Dec 12 14:25:33 2003
+++ php-src/ext/standard/file.c Fri Dec 12 20:44:24 2003
@@ -21,7 +21,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: file.c,v 1.279.2.44 2003/12/12 19:25:33 iliaa Exp $ */
+/* $Id: file.c,v 1.279.2.45 2003/12/13 01:44:24 iliaa Exp $ */
/* Synced with php 3.0 revision 1.218 1999-06-16 [ssb] */
@@ -2266,7 +2266,7 @@
array_init(return_value);
-#define CSV_ADD_ENTRY(s, es, st, copy) { \
+#define CSV_ADD_ENTRY(s, es, st) { \
int len = es - st; \
if (len) { \
while (isspace((int)*(unsigned char *)s)) { \
@@ -2275,7 +2275,7 @@
} \
} \
if (len) { \
- add_next_index_stringl(return_value, s, len, copy); \
+ add_next_index_stringl(return_value, s, len, 1); \
} else { \
add_next_index_string(return_value, "", 1); \
} \
@@ -2284,29 +2284,23 @@
if (!enclosure || !(p = _php_fgetcsv_find_enclosure(s, (e - s), enclosure))) {
no_enclosure:
while ((p = memchr(s, delimiter, (e - s)))) {
- CSV_ADD_ENTRY(s, p, s, 1);
+ CSV_ADD_ENTRY(s, p, s);
s = p + 1;
}
} else {
- char *p2=NULL, *buf2;
- int buf2_len;
+ char *p2=NULL, *buf2=NULL;
+ int buf2_len=0;
enclosure:
/* handle complete fields before the enclosure */
while (s < p && (p2 = memchr(s, delimiter, (p - s)))) {
- CSV_ADD_ENTRY(s, p2, s, 1);
+ CSV_ADD_ENTRY(s, p2, s);
s = p2 + 1;
}
- if ((p - s)) {
- buf2_len = p - s;
- buf2 = emalloc(buf2_len + 1);
- memcpy(buf2, s, buf2_len);
- } else {
- buf2 = NULL;
- buf2_len = 0;
+ p++;
+ if (*s == enclosure) {
s++;
}
- p++;
/* try to find end of enclosure */
while (!(p2 = _php_fgetcsv_find_enclosure(p, (e - p), enclosure))) {
@@ -2336,8 +2330,8 @@
memcpy(buf2 + buf2_len, p2, (p - p2));
buf2_len += (p - p2);
}
- buf2[buf2_len] = '\0';
- CSV_ADD_ENTRY(buf2, buf2_len, 0, 0);
+ CSV_ADD_ENTRY(buf2, buf2_len, 0);
+ buf2_len = 0;
if (!(p = _php_fgetcsv_find_enclosure(s, (e - s), enclosure)))
{
goto no_enclosure;
@@ -2355,15 +2349,18 @@
buf2_len += (e - s);
}
enclosure_done:
- s = e = NULL;
- buf2[buf2_len] = '\0';
- CSV_ADD_ENTRY(buf2, buf2_len, 0, 0);
+ CSV_ADD_ENTRY(buf2, buf2_len, 0);
+ if (buf2) {
+ efree(buf2);
+ }
+ goto done;
}
}
if (s < e) {
- CSV_ADD_ENTRY(s, e, s, 1);
+ CSV_ADD_ENTRY(s, e, s);
}
+done:
efree(buf);
}
/* }}} */
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php