it* gopherproxy-c customized Err codevoid.de 70 i Err codevoid.de 70 hgit clone git://git.codevoid.de/gopherproxy-c-sdk URL:git://git.codevoid.de/gopherproxy-c-sdk codevoid.de 70 1Log /git/gopherproxy-c-sdk/log.gph codevoid.de 70 1Files /git/gopherproxy-c-sdk/files.gph codevoid.de 70 1Refs /git/gopherproxy-c-sdk/refs.gph codevoid.de 70 1README /git/gopherproxy-c-sdk/file/README.gph codevoid.de 70 1LICENSE /git/gopherproxy-c-sdk/file/LICENSE.gph codevoid.de 70 i--- Err codevoid.de 70 1commit 9612b7ed97d46f386db7334b7ef880038a92df8c /git/gopherproxy-c-sdk/commit/9612b7ed97d46f386db7334b7ef880038a92df8c.gph codevoid.de 70 1parent d0cd571a262cbbca3c7d12f08799e6835552bf13 /git/gopherproxy-c-sdk/commit/d0cd571a262cbbca3c7d12f08799e6835552bf13.gph codevoid.de 70 hAuthor: Hiltjo Posthuma URL:mailto:hiltjo@codemadness.org codevoid.de 70 iDate: Fri, 17 Aug 2018 18:37:09 +0200 Err codevoid.de 70 i Err codevoid.de 70 iparseuri: support IPv6 address for host Err codevoid.de 70 i Err codevoid.de 70 iDiffstat: Err codevoid.de 70 i M gopherproxy.c | 25 ++++++++++++++++++------- Err codevoid.de 70 i Err codevoid.de 70 i1 file changed, 18 insertions(+), 7 deletions(-) Err codevoid.de 70 i--- Err codevoid.de 70 1diff --git a/gopherproxy.c b/gopherproxy.c /git/gopherproxy-c-sdk/file/gopherproxy.c.gph codevoid.de 70 it@@ -446,15 +446,26 @@ parseuri(const char *str, struct uri *u) Err codevoid.de 70 i memset(u, 0, sizeof(struct uri)); Err codevoid.de 70 i Err codevoid.de 70 i s = str; Err codevoid.de 70 i- e = &s[strcspn(s, ":/")]; Err codevoid.de 70 i- if (e - s + 1 >= sizeof(u->host)) Err codevoid.de 70 i- return 0; Err codevoid.de 70 i- memcpy(u->host, s, e - s); Err codevoid.de 70 i- u->host[e - s] = '\0'; Err codevoid.de 70 i Err codevoid.de 70 i- if (*e == ':') { Err codevoid.de 70 i- s = ++e; Err codevoid.de 70 i+ /* IPv6 */ Err codevoid.de 70 i+ if (*s == '[') { Err codevoid.de 70 i+ s++; Err codevoid.de 70 i+ e = strchr(s, ']'); Err codevoid.de 70 i+ if (!e || e - s + 1 >= sizeof(u->host)) Err codevoid.de 70 i+ return 0; Err codevoid.de 70 i+ memcpy(u->host, s, e - s); Err codevoid.de 70 i+ u->host[e - s] = '\0'; Err codevoid.de 70 i+ e++; Err codevoid.de 70 i+ } else { Err codevoid.de 70 i+ e = &s[strcspn(s, ":/")]; Err codevoid.de 70 i+ if (e - s + 1 >= sizeof(u->host)) Err codevoid.de 70 i+ return 0; Err codevoid.de 70 i+ memcpy(u->host, s, e - s); Err codevoid.de 70 i+ u->host[e - s] = '\0'; Err codevoid.de 70 i+ } Err codevoid.de 70 i Err codevoid.de 70 i+ if (*e == ':') { Err codevoid.de 70 i+ s = e + 1; Err codevoid.de 70 i e = &s[strcspn(s, "/")]; Err codevoid.de 70 i Err codevoid.de 70 i if (e - s + 1 >= sizeof(u->port)) Err codevoid.de 70 .