diff options
author | mvglasow <michael -at- vonglasow.com> | 2018-01-28 18:05:25 +0100 |
---|---|---|
committer | mvglasow <michael -at- vonglasow.com> | 2018-01-28 18:05:25 +0100 |
commit | dab2278349cbeff538e89eac0e30e4761fb42c26 (patch) | |
tree | 2160d0e2f1f5df338fabd2c6fda103f49c652d5f /navit/xmlconfig.c | |
parent | eec1849857a5eb96fc4672b26182eeaa8402c3d6 (diff) | |
download | navit-dab2278349cbeff538e89eac0e30e4761fb42c26.tar.gz |
Add:core:Make XML parsing more generic (do not exit on failure)
Signed-off-by: mvglasow <michael -at- vonglasow.com>
Diffstat (limited to 'navit/xmlconfig.c')
-rw-r--r-- | navit/xmlconfig.c | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/navit/xmlconfig.c b/navit/xmlconfig.c index 9a1a0b50b..7d348393d 100644 --- a/navit/xmlconfig.c +++ b/navit/xmlconfig.c @@ -1062,7 +1062,19 @@ parse_node_text(ezxml_t node, void *data, void (*start)(void *, const char *, co } #endif -void +/** + * @brief Parses XML text. + * + * @param document The XML data to parse + * @param data Points to a user-defined data structure which will be passed to each of the callbacks + * passed in the following arguments + * @param start Callback which will be called when an open tag is encountered + * @param end Callback which will be called when a close tag is encountered + * @param text Callback which will be called when character data is encountered + * + * @return True on success, false on failure. + */ +int xml_parse_text(const char *document, void *data, void (*start)(xml_context *, const char *, const char **, const char **, void *, GError **), void (*end)(xml_context *, const char *, void *, GError **), @@ -1072,17 +1084,17 @@ xml_parse_text(const char *document, void *data, xml_context *context; gboolean result; - context = g_markup_parse_context_new (&parser, 0, data, NULL); if (!document){ - dbg(lvl_error, "FATAL: No XML data supplied (looks like incorrect configuration for internal GUI).\n"); - exit(1); + dbg(lvl_error, "FATAL: No XML data supplied.\n"); + return 0; } + context = g_markup_parse_context_new (&parser, 0, data, NULL); result = g_markup_parse_context_parse (context, document, strlen(document), NULL); + g_markup_parse_context_free (context); if (!result){ dbg(lvl_error, "FATAL: Cannot parse data as XML: '%s'\n", document); - exit(1); + return 0; } - g_markup_parse_context_free (context); #else char *str=g_strdup(document); ezxml_t root = ezxml_parse_str(str, strlen(str)); @@ -1092,6 +1104,7 @@ xml_parse_text(const char *document, void *data, ezxml_free(root); g_free(str); #endif + return 1; } |