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:
M | hurl.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])