From d76dca165bd3312d78df7f6794d5fbab7f634ecd Mon Sep 17 00:00:00 2001 From: Jonathan Gordon Date: Tue, 26 Feb 2013 21:12:00 +1100 Subject: checkwps: show a helpful error if the parser callback errors out Change-Id: Ie3e35292ba8d74f0ff3d1bb3483a5e83aae0e6b6 --- lib/skin_parser/skin_debug.c | 3 +++ lib/skin_parser/skin_parser.c | 6 ++++++ lib/skin_parser/skin_parser.h | 3 ++- 3 files changed, 11 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/skin_parser/skin_debug.c b/lib/skin_parser/skin_debug.c index 9537182..a204274 100644 --- a/lib/skin_parser/skin_debug.c +++ b/lib/skin_parser/skin_debug.c @@ -105,6 +105,9 @@ void skin_error(enum skin_errorcode error, const char* cursor) case MULTILINE_EXPECTED: error_message = "Expected subline separator"; break; + case GOT_CALLBACK_ERROR: + error_message = "Parser callback returned error"; + break; }; } diff --git a/lib/skin_parser/skin_parser.c b/lib/skin_parser/skin_parser.c index 1f4b87a..39a41e9 100644 --- a/lib/skin_parser/skin_parser.c +++ b/lib/skin_parser/skin_parser.c @@ -546,7 +546,10 @@ static int skin_parse_tag(struct skin_element* element, const char** document) if (callback) { if (callback(element, callback_data) == CALLBACK_ERROR) + { + skin_error(GOT_CALLBACK_ERROR, cursor); return 0; + } } #endif *document = cursor; @@ -822,7 +825,10 @@ static int skin_parse_tag(struct skin_element* element, const char** document) if (callback) { if (callback(element, callback_data) == CALLBACK_ERROR) + { + skin_error(GOT_CALLBACK_ERROR, *document); return 0; + } } #endif *document = cursor; diff --git a/lib/skin_parser/skin_parser.h b/lib/skin_parser/skin_parser.h index ec51b64..c53896c 100644 --- a/lib/skin_parser/skin_parser.h +++ b/lib/skin_parser/skin_parser.h @@ -79,7 +79,8 @@ enum skin_errorcode DECIMAL_EXPECTED, SEPARATOR_EXPECTED, CLOSE_EXPECTED, - MULTILINE_EXPECTED + MULTILINE_EXPECTED, + GOT_CALLBACK_ERROR }; /* Holds a tag parameter, either numeric or text */ -- cgit v1.1