commit a5c3e03db696b4501ec5d89a468d05e96e1cae44 from: Omar Polo date: Tue Mar 02 13:35:19 2021 UTC flush the buffer when freeing the parser commit - ea8695dc16abaaec6b0f73500d1b8bc0c43b88ad commit + a5c3e03db696b4501ec5d89a468d05e96e1cae44 blob - b74c5ce7f4397b3d7d60c58c9180459d235feb23 blob + 71dc1c2a3f2bc50932abd94c2f58a3a79d759729 --- gemtext.c +++ gemtext.c @@ -29,7 +29,7 @@ #include static int gemtext_parse(struct parser*, const char*, size_t); -static void gemtext_free(struct parser*); +static int gemtext_free(struct parser*); static int parse_text(struct parser*, enum line_type, const char*, size_t); static int parse_link(struct parser*, enum line_type, const char*, size_t); @@ -399,8 +399,20 @@ gemtext_parse(struct parser *p, const char *buf, size_ return set_buf(p, b, len); } -static void +static int gemtext_free(struct parser *p) { + enum line_type t; + + /* flush the buffer */ + if (p->len != 0) { + t = detect_line_type(p->buf, p->len, p->flags); + if (!parsers[t](p, t, p->buf, p->len)) + return 0; + if (p->flags && !emit_line(p, LINE_PRE_END, NULL, NULL)) + return 0; + } + free(p->buf); + return 1; } blob - 6ff71d7a72cabe2d1707e64e327cfba3f77372a2 blob + 1330c88e814230f9bc388e0dd86f31c2384ca4fd --- telescope.c +++ telescope.c @@ -108,8 +108,13 @@ handle_imsg_buf(struct imsg *imsg, size_t datalen) static void handle_imsg_eof(struct imsg *imsg, size_t datalen) { - /* printf("===== EOF\n"); */ - /* event_loopbreak(); */ + struct tab *t; + + t = tab_by_id(imsg->hdr.peerid); + if (!t->page.free(&t->page)) + die(); + + ui_on_tab_refresh(t); } static void blob - 785fae6dcf27d3a61d967a2b59313424376458e8 blob + fba4108e1f8e0cf7637d6dce7f7e1c4d31f4f1dc --- telescope.h +++ telescope.h @@ -68,7 +68,7 @@ struct page; /* typedef void (*initparserfn)(struct parser*); */ typedef int (*parsechunkfn)(struct parser*, const char*, size_t); -typedef void (*parserfreefn)(struct parser*); +typedef int (*parserfreefn)(struct parser*); typedef void (imsg_handlerfn)(struct imsg*, size_t);