From b28cbd606d45b6c4ba2079ce8cd5a8075516ff84 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Tue, 24 Apr 2018 22:04:23 +0200 Subject: [PATCH] minimal expat parsing code --- src/exparse.c | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/exparse.c b/src/exparse.c index 0a9722344..70328e0ae 100644 --- a/src/exparse.c +++ b/src/exparse.c @@ -1,7 +1,41 @@ #include "exparse.h" +#include "util/log.h" + #include int exparse_readfile(const char * filename) { - return 1; + XML_Parser xp; + FILE *F; + int err = 1; + char buf[4096]; + + F = fopen(filename, "r"); + if (!F) { + return 2; + } + xp = XML_ParserCreate("UTF-8"); + for (;;) { + size_t len = (int) fread(buf, 1, sizeof(buf), F); + int done; + + if (ferror(F)) { + log_error("read error in %s", filename); + return -1; + } + done = feof(F); + if (XML_Parse(xp, buf, len, done) == XML_STATUS_ERROR) { + log_error("parse error at line %u of %s: %s", + XML_GetCurrentLineNumber(xp), + filename, + XML_ErrorString(XML_GetErrorCode(xp))); + return -1; + } + if (done) { + break; + } + } + XML_ParserFree(xp); + fclose(F); + return err; }