diff options
-rw-r--r-- | file.c | 12 | ||||
-rw-r--r-- | url.c | 42 |
2 files changed, 37 insertions, 17 deletions
@@ -1712,6 +1712,8 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer, URLOption url_option; Str tmp; Str volatile page = NULL; +#ifdef USE_GOPHER +#endif #ifdef USE_M17N wc_ces charset = WC_CES_US_ASCII; #endif @@ -1959,7 +1961,10 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer, #endif /* USE_NNTP */ #ifdef USE_GOPHER else if (pu.scheme == SCM_GOPHER) { - switch (pu.file[strlen(pu.file)-1]) { + p = pu.file; + while(*p == '/') + ++p; + switch (*p) { case '0': t = "text/plain"; break; @@ -7470,10 +7475,7 @@ loadGopherDir(URLFile *uf, ParsedURL *pu, wc_ces * charset) break; } type = Strsubstr(name, 0, 1); - if(file->ptr[0] == '/') - q = Strnew_m_charp("gopher://", host->ptr, ":", port->ptr, file->ptr, type->ptr, NULL)->ptr; - else - q = Strnew_m_charp("gopher://", host->ptr, ":", port->ptr, "/", file->ptr, type->ptr, NULL)->ptr; + q = Strnew_m_charp("gopher://", host->ptr, ":", port->ptr, "/", type->ptr, file->ptr, NULL)->ptr; if(link) { if(pre) { Strcat_charp(tmp, "</pre>"); @@ -931,6 +931,14 @@ parseURL(char *url, ParsedURL *p_url, ParsedURL *current) #endif q = p; +#ifdef USE_GOPHER + if (p_url->scheme == SCM_GOPHER) { + if (*q == '/') + q++; + if (*q && q[0] != '/' && q[1] != '/' && q[2] == '/') + q++; + } +#endif /* USE_GOPHER */ if (*p == '/') p++; if (*p == '\0' || *p == '#' || *p == '?') { /* scheme://host[:port]/ */ @@ -1562,7 +1570,11 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current, Str tmp; int sock, scheme; char *p, *q, *u; - char end; +#ifdef USE_GOPHER + Str gophertmp; + char type; + int n; +#endif URLFile uf; HRequest hr0; #ifdef USE_SSL @@ -1826,26 +1838,32 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current, break; #ifdef USE_GOPHER case SCM_GOPHER: - if(pu->file) { - end = pu->file[strlen(pu->file)-1]; - switch(end) { + p = pu->file; + n = 0; + while(*p == '/') { + ++p; + ++n; + } + if(*p != '\0') { + type = pu->file[n]; + switch(type) { case '0': case '1': case 'm': case 's': case 'g': case 'h': - pu->file[strlen(pu->file)-1] = '\0'; + tmp = Strnew_charp(pu->file); + gophertmp = Strdup(tmp); + Strdelete(tmp, n, 1); + pu->file = tmp->ptr; break; default: - if('0' <= end && end <= '9') - pu->file[strlen(pu->file)-1] = '\0'; - else - end = '\0'; + type = '\0'; break; } } else { - end = '\0'; + type = '\0'; } if (non_null(GOPHER_proxy) && !Do_not_use_proxy && @@ -1869,8 +1887,8 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current, Strcat_char(tmp, '\n'); } write(sock, tmp->ptr, tmp->length); - if(end != '\0') { - pu->file[strlen(pu->file)] = end; + if(type != '\0') { + pu->file = gophertmp->ptr; } break; #endif /* USE_GOPHER */ |