commit 1f4b187a0d3c25676f251052ac41a7bec2a74631
parent e73c455e70a9d94eb112089dee6f9d4f7ef37f09
Author: Santtu Lakkala <inz@inz.fi>
Date: Mon, 17 May 2021 00:31:47 +0300
Improve gophermap processing
Diffstat:
M | main.c | | | 22 | ++++++++++------------ |
1 file changed, 10 insertions(+), 12 deletions(-)
diff --git a/main.c b/main.c
@@ -905,19 +905,17 @@ static size_t strnchrcnt(const char *haystack, char needle, size_t hsl)
static bool process_gophermap_line(EV_P_ struct client *c, char *line, size_t linelen)
{
+ size_t tabcount = strnchrcnt(line, '\t', linelen);
+ const char *tabstr = "\t.\t.\t.";
if (*line == 'i' || *line == '3')
- return client_printf(c, "%.*s\t.\t.\t.\r\n", (int)linelen, line);
- else {
- size_t tabcount = strnchrcnt(line, '\t', linelen);
-
- if (tabcount > 2)
- return client_printf(c, "%.*s\r\n", (int)linelen, line);
- if (tabcount > 1)
- return client_printf(c, "%.*s\t70\r\n", (int)linelen, line);
- if (tabcount)
- return client_printf(c, "%.*s\t%s\t%s\r\n", (int)linelen, line, hostname, oport);
- return client_printf(c, "i%.*s\t.\t.\t.\r\n", (int)linelen, line);
- }
+ return client_printf(c, "%.*s%s\r\n", (int)linelen, line, tabcount < 3 ? tabstr + 2 * tabcount : "");
+ else if (tabcount > 2)
+ return client_printf(c, "%.*s\r\n", (int)linelen, line);
+ else if (tabcount > 1)
+ return client_printf(c, "%.*s\t70\r\n", (int)linelen, line);
+ else if (tabcount)
+ return client_printf(c, "%.*s\t%s\t%s\r\n", (int)linelen, line, hostname, oport);
+ return client_printf(c, "i%.*s\t.\t.\t.\r\n", (int)linelen, line);
}
static void update_gophermap(EV_P_ struct client *c, int revents)