support empty line at the end of the file - ics2txt - convert icalendar .ics file to plain text HTML git clone git://bitreich.org/ics2txt git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/ics2txt DIR Log DIR Files DIR Refs DIR Tags DIR README --- DIR commit d10df705caaa2ca4e3229af6d5ec76e0f0d301da DIR parent cf0323aa059bf54b2a88046d7e6e17efe16f9a2e HTML Author: Josuah Demangeon <me@josuah.net> Date: Mon, 14 Jun 2021 08:31:43 +0200 support empty line at the end of the file Diffstat: M ical.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) --- DIR diff --git a/ical.c b/ical.c @@ -131,7 +131,6 @@ hook_block_begin(IcalParser *p, char *name) return ical_error(p, "max recurion reached"); if (!Xstrlcpy(p->current->name, name)) return ical_error(p, "value too large"); - return 0; } @@ -143,7 +142,6 @@ hook_block_end(IcalParser *p, char *name) p->current--; if (p->current < p->stack) return ical_error(p, "more END: than BEGIN:"); - return 0; } @@ -260,22 +258,25 @@ ical_parse(IcalParser *p, FILE *fp) while (!feof(fp)) { if ((contentline = realloc(contentline, 1)) == NULL) - return -1; + return ical_error(p, strerror(errno)); *contentline = '\0'; do { do { p->linenum++; - if (getline(&ln, &sz, fp) <= 0) - return -1; + if (getline(&ln, &sz, fp) <= 0) { + if (ferror(fp)) + return ical_error(p, strerror(errno)); + goto end; + } strchomp(ln); } while (*ln == '\0'); if (strappend(&contentline, ln) < 0) - return -1; + return ical_error(p, strerror(errno)); if ((c = fgetc(fp)) == EOF) { if (ferror(fp)) - return -1; + return ical_error(p, strerror(errno)); goto done; } } while (c == ' '); @@ -285,6 +286,7 @@ done: if ((err = ical_parse_contentline(p, contentline)) != 0) break; } +end: free(contentline); free(ln); return err;