hurl

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 795503097fd443e2cf68b26a734884ff4ed4ea1b
parent e3912666fc4f1516b588d03f6ae389dbc84339b4
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date:   Sun, 28 Mar 2021 13:55:27 +0200

use the same path logic for gophers:// as gopher://

A type is optional.

Write path logic in a bit more clear way.

Diffstat:
Mhurl.c | 25+++++++++++++++++--------
1 file changed, 17 insertions(+), 8 deletions(-)

diff --git a/hurl.c b/hurl.c @@ -496,8 +496,12 @@ gopher_request(void) /* create and send path, skip type part, empty path is allowed, see RFC 4266 The gopher URI Scheme - section 2.1 */ path = u.path; - if (*path == '/' && *path++) + if (*path == '/') { path++; + if (*path) + path++; /* skip type */ + } + r = snprintf(buf, sizeof(buf), "%s%s%s\r\n", path, u.query[0] ? "?" : "", u.query); if (r < 0 || (size_t)r >= sizeof(buf)) { @@ -547,7 +551,7 @@ gophers_request(void) { struct tls *t; char buf[READ_BUF_SIZ], *p; - const char *errstr; + const char *errstr, *path; size_t len = 0; ssize_t r; int fd = -1, ret = 1; @@ -578,8 +582,17 @@ gophers_request(void) if (pledge("stdio", NULL) == -1) err(1, "pledge"); - /* create and send path, skip type part */ - r = snprintf(buf, sizeof(buf), "%s\r\n", u.path + 2); + /* create and send path, skip type part, empty path is allowed, + see RFC 4266 The gopher URI Scheme - section 2.1 */ + path = u.path; + if (*path == '/') { + path++; + if (*path) + path++; /* skip type */ + } + + r = snprintf(buf, sizeof(buf), "%s%s%s\r\n", + path, u.query[0] ? "?" : "", u.query); if (r < 0 || (size_t)r >= sizeof(buf)) { fprintf(stderr, "not writing header because it is truncated"); goto err; @@ -727,10 +740,6 @@ main(int argc, char **argv) } if (!u.port[0]) memcpy(u.port, "70", 3); - - if (u.path[0] != '/' || u.path[1] == '\0') - errx(1, "must specify type"); - statuscode = gophers_request(); } else { if (u.proto[0])