aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--file.c12
-rw-r--r--url.c42
2 files changed, 37 insertions, 17 deletions
diff --git a/file.c b/file.c
index 12f439a..358f20a 100644
--- a/file.c
+++ b/file.c
@@ -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>");
diff --git a/url.c b/url.c
index d5d2760..ce0a53c 100644
--- a/url.c
+++ b/url.c
@@ -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 */