From 58214ec5f982c1b97aadce254c958a5f922c9724 Mon Sep 17 00:00:00 2001 From: wrmr Date: Sat, 2 Nov 2024 15:10:41 -0500 Subject: split main.c in several places, began work on design doc --- net.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 net.c (limited to 'net.c') diff --git a/net.c b/net.c new file mode 100644 index 0000000..73f50d4 --- /dev/null +++ b/net.c @@ -0,0 +1,34 @@ +#include +#include "net.h" + +int net_addr(const char *url, struct addr *adr, enum protocol prot_default) { + char *prot_mark; + if ((prot_mark = strstr(url, "://"))) { + static struct { + const char *str; + enum protocol prot; + } prot_str_tbl[] = { + { "gopher", PROT_GOPHER }, + { "gemini", PROT_GEMINI }, + { "file", PROT_FILE }, + }; + size_t n = prot_mark - url; + adr->prot = PROT_UNKNOWN; + for (size_t i = 0; i < sizeof prot_str_tbl / sizeof *prot_str_tbl; i++) { + if (!strncmp(prot_str_tbl[i].str, url, n)) { + adr->prot = prot_str_tbl[i].prot; + break; + } + } + url = prot_mark + 3; + } else { + adr->prot = prot_default; + } + adr->type = TYPE_PLAIN; + adr->host_len = 0; + size_t n = strlen(url); + if (n > PATH_MAX) return -1; + adr->path_len = n; + memcpy(adr->path, url, n); + return 0; +} -- cgit 1.4.1-2-gfad0