diff options
| author | Tadas Vilkeliskis <vilkeliskis.t@gmail.com> | 2013-11-03 16:23:58 -0500 |
|---|---|---|
| committer | Tadas Vilkeliskis <vilkeliskis.t@gmail.com> | 2013-11-03 16:23:58 -0500 |
| commit | 01cf97e60f970490a94a56d8c82fca320e17fac5 (patch) | |
| tree | 2eacf7fd2f800bc04c06eb383e07b731ef7fb0a9 /src | |
| parent | 4cd6b4d5045b5d3530b27159edca64479a5c346c (diff) | |
put parser into error state if callback returns non-zero
Diffstat (limited to 'src')
| -rw-r--r-- | src/csv_parser.c | 6 | ||||
| -rw-r--r-- | src/csv_parser.h | 7 |
2 files changed, 11 insertions, 2 deletions
diff --git a/src/csv_parser.c b/src/csv_parser.c index 29f0529..b93713a 100644 --- a/src/csv_parser.c +++ b/src/csv_parser.c @@ -96,6 +96,7 @@ size_t csv_parser_execute(csv_parser_t *parser, parser->row, parser->col); if (r) { + parser->state = csvps_error; return parser->nread; } } @@ -112,6 +113,7 @@ size_t csv_parser_execute(csv_parser_t *parser, parser->row, parser->col); if (r) { + parser->state = csvps_error; return parser->nread; } } @@ -129,6 +131,7 @@ size_t csv_parser_execute(csv_parser_t *parser, parser->row, parser->col); if (r) { + parser->state = csvps_error; return parser->nread; } } @@ -142,6 +145,9 @@ size_t csv_parser_execute(csv_parser_t *parser, parser->state = csvps_line_start; } break; + case csvps_error: + return parser->nread; + break; default: assert(0 && "invalid parser state"); break; diff --git a/src/csv_parser.h b/src/csv_parser.h index 2e263a2..8c78e8b 100644 --- a/src/csv_parser.h +++ b/src/csv_parser.h @@ -37,7 +37,8 @@ typedef enum csv_parser_state_t { csvps_field_value, csvps_field_end, csvps_line_end_begin, - csvps_line_end + csvps_line_end, + csvps_error, } csv_parser_state_t; @@ -78,7 +79,9 @@ void csv_parser_init(csv_parser_t *parser); /** * Executes CSV parser on the given data. Returns number - * of bytes read. + * of bytes read. User should always check if parser state + * is ``csvps_error``. Parser will get into the error state + * if field callback returns a non-zero value. */ size_t csv_parser_execute(csv_parser_t *parser, const csv_parser_settings_t *settings, |
