diff options
Diffstat (limited to 'csv.c')
| -rw-r--r-- | csv.c | 13 |
1 files changed, 13 insertions, 0 deletions
| @@ -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 | } |
