summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--csv.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/csv.c b/csv.c
index dfc79c9..4d48f01 100644
--- a/csv.c
+++ b/csv.c
@@ -255,6 +255,15 @@ csv_read(csv_t *csv, FILE *in)
255 assert(csv != NULL); 255 assert(csv != NULL);
256 assert(in != NULL); 256 assert(in != NULL);
257 257
258 /* do not try to read if EOF has already been seen */
259 if ( feof(in) ) {
260 return -1;
261 }
262
263 if ( ferror(in) ) {
264 csv_fatal_error("I/O error", csv->csv_options);
265 }
266
258 enum { 267 enum {
259 STATE_START_FIELD, 268 STATE_START_FIELD,
260 STATE_QUOTED_FIELD, 269 STATE_QUOTED_FIELD,
@@ -376,6 +385,10 @@ csv_read(csv_t *csv, FILE *in)
376 return csv->csv_field.pos; 385 return csv->csv_field.pos;
377 386
378 case STATE_END_FILE: 387 case STATE_END_FILE:
388 if ( ferror(in) ) {
389 csv_fatal_error("I/O error", csv->csv_options);
390 }
391
379 if ( csv_string_empty(&csv->csv_string) ) { 392 if ( csv_string_empty(&csv->csv_string) ) {
380 return -1; /* EOF reached */ 393 return -1; /* EOF reached */
381 } 394 }