commit 140a1abdc7de2af3283c254cf82435384495b1c0 from: Omar Polo date: Mon Mar 25 09:42:42 2024 UTC slightly rework gemini reply handling - rename `r' to `code' - defer the buf_drain() call With libevent we had to free() the header string, whereas buf_getdelim() returns a string from the buffer itself, so we can safely defer the drain operation after the sanity checks. commit - 9659786c230c5dd9f5bb0193e07d068d828dfb44 commit + 140a1abdc7de2af3283c254cf82435384495b1c0 blob - 3b7cac00601246e8742be2ebf240ea4665858c1a blob + c892b6b9639d0a5658a1aff25591beebb10294d4 --- net.c +++ net.c @@ -394,7 +394,7 @@ net_ev(int fd, int ev, void *d) ssize_t read; size_t len; char *header; - int r; + int code; if (ev == EV_TIMEOUT) { close_with_err(req, "Timeout loading page"); @@ -501,17 +501,17 @@ net_ev(int fd, int ev, void *d) return; } req->state = CONN_BODY; - r = gemini_parse_reply(req, header); - buf_drain(&req->bio.rbuf, len); - if (r == -1) { + if ((code = gemini_parse_reply(req, header)) == -1) { close_with_err(req, "Malformed gemini reply"); return; } - if (r < 20 || r >= 30) { + if (code < 20 || code >= 30) { close_conn(0, 0, req); return; } + buf_drain(&req->bio.rbuf, len); + /* pause until we've been told to go ahead */ ev_del(req->fd); return;