Commit Diff


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, '#');