Commit Diff


commit - ea8695dc16abaaec6b0f73500d1b8bc0c43b88ad
commit + a5c3e03db696b4501ec5d89a468d05e96e1cae44
blob - b74c5ce7f4397b3d7d60c58c9180459d235feb23
blob + 71dc1c2a3f2bc50932abd94c2f58a3a79d759729
--- gemtext.c
+++ gemtext.c
@@ -29,7 +29,7 @@
 #include <stdlib.h>
 
 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);