aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/csv_parser.c6
-rw-r--r--src/csv_parser.h7
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,