commit ba714ce39272d4bc52ac0f792f0f086afe3a477e from: Omar Polo date: Thu Apr 01 10:22:45 2021 UTC hack to support // while waiting for a new RFC-compliant URL parser commit - 37d429b0d8162e4cd807cac4a5da76b15c92223c commit + ba714ce39272d4bc52ac0f792f0f086afe3a477e blob - b5e2ea68b3914b97562ab76862fe8177a1732aad blob + bc56c53b31e09dddbca9ab0e5ccaabe4ba280fde --- url.c +++ url.c @@ -127,11 +127,21 @@ parse_pct_encoded(struct parser *p) return 1; } -/* ALPHA *( ALPHA / DIGIT / "+" / "-" / "." ) "://" */ +/* + * ALPHA *( ALPHA / DIGIT / "+" / "-" / "." ) "://" + * or + * "//" + */ static int parse_scheme(struct parser *p) { p->parsed->scheme = p->iri; + + if (p->iri[0] == '/' && p->iri[1] == '/') { + *p->iri = '\0'; + p->iri += 2; + return 1; + } if (!isalpha(*p->iri)) { p->err = "illegal character in scheme"; @@ -419,8 +429,10 @@ url_parse(const char *data, struct url *url, const cha return 0; } - if (u.scheme != NULL) - strlcpy(url->scheme, u.scheme, sizeof(url->scheme)); + /* XXX: hack around our not complete compliance with RFC 3986 */ + /* if (u.scheme != NULL) */ + strlcpy(url->scheme, "gemini", sizeof(url->scheme)); + if (u.host != NULL) strlcpy(url->host, u.host, sizeof(url->host)); if (u.port != NULL) @@ -440,7 +452,7 @@ url_resolve_from(struct url *url, const char *str, con { char *marker, *query, *hash, *i; - marker = strstr(str, "://"); + marker = strstr(str, "//"); query = strchr(str, '?'); hash = strchr(str, '#');