summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--expat/examples/elements.c12
-rw-r--r--expat/examples/outline.c14
2 files changed, 18 insertions, 8 deletions
diff --git a/expat/examples/elements.c b/expat/examples/elements.c
index cf7d29e2..a2673d37 100644
--- a/expat/examples/elements.c
+++ b/expat/examples/elements.c
@@ -85,8 +85,16 @@ main(void) {
XML_SetUserData(parser, &depth);
XML_SetElementHandler(parser, startElement, endElement);
do {
- size_t len = fread(buf, 1, sizeof(buf), stdin);
- done = len < sizeof(buf);
+ const size_t len = fread(buf, 1, sizeof(buf), stdin);
+
+ if (ferror(stdin)) {
+ fprintf(stderr, "Read error\n");
+ XML_ParserFree(parser);
+ return 1;
+ }
+
+ done = feof(stdin);
+
if (XML_Parse(parser, buf, (int)len, done) == XML_STATUS_ERROR) {
fprintf(stderr,
"Parse error at line %" XML_FMT_INT_MOD "u:\n%" XML_FMT_STR "\n",
diff --git a/expat/examples/outline.c b/expat/examples/outline.c
index d553d234..4f2490f3 100644
--- a/expat/examples/outline.c
+++ b/expat/examples/outline.c
@@ -86,27 +86,29 @@ main(void) {
if (! parser) {
fprintf(stderr, "Couldn't allocate memory for parser\n");
- exit(-1);
+ return 1;
}
XML_SetUserData(parser, &depth);
XML_SetElementHandler(parser, startElement, endElement);
do {
- int len;
+ const size_t len = fread(buf, 1, sizeof(buf), stdin);
- len = (int)fread(buf, 1, BUFSIZ, stdin);
if (ferror(stdin)) {
fprintf(stderr, "Read error\n");
- exit(-1);
+ XML_ParserFree(parser);
+ return 1;
}
+
done = feof(stdin);
- if (XML_Parse(parser, buf, len, done) == XML_STATUS_ERROR) {
+ if (XML_Parse(parser, buf, (int)len, done) == XML_STATUS_ERROR) {
fprintf(stderr,
"Parse error at line %" XML_FMT_INT_MOD "u:\n%" XML_FMT_STR "\n",
XML_GetCurrentLineNumber(parser),
XML_ErrorString(XML_GetErrorCode(parser)));
- exit(-1);
+ XML_ParserFree(parser);
+ return 1;
}
} while (! done);
XML_ParserFree(parser);