diff options
| -rw-r--r-- | file.c | 23 | ||||
| -rw-r--r-- | url.c | 33 | 
2 files changed, 41 insertions, 15 deletions
| @@ -1959,7 +1959,7 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,  #endif				/* USE_NNTP */  #ifdef USE_GOPHER      else if (pu.scheme == SCM_GOPHER) { -	switch (*pu.file) { +	switch (pu.file[strlen(pu.file)-1]) {  	case '0':  	    t = "text/plain";  	    break; @@ -7393,8 +7393,9 @@ Str  loadGopherDir(URLFile *uf, ParsedURL *pu, wc_ces * charset)  {      Str volatile tmp; -    Str lbuf, name, file, host, port; +    Str lbuf, name, file, host, port, type;      char *volatile p, *volatile q; +    int link;      MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL;  #ifdef USE_M17N      wc_ces doc_charset = DocumentCharset; @@ -7440,6 +7441,7 @@ loadGopherDir(URLFile *uf, ParsedURL *pu, wc_ces * charset)  	for (q = p; *q && *q != '\t' && *q != '\r' && *q != '\n'; q++) ;  	port = Strnew_charp_n(p, q - p); +	link = 1;  	switch (name->ptr[0]) {  	case '0':  	    p = "[text file]"; @@ -7459,15 +7461,22 @@ loadGopherDir(URLFile *uf, ParsedURL *pu, wc_ces * charset)  	case 'h':  	    p = "[HTML]";  	    break; +	case 'i': +	    link = 0; +	    break;  	default:  	    p = "[unsupported]";  	    break;  	} -	q = Strnew_m_charp("gopher://", host->ptr, ":", port->ptr, -			   "/", file->ptr, NULL)->ptr; -	Strcat_m_charp(tmp, "<a href=\"", -		       html_quote(url_encode(q, NULL, *charset)), -		       "\">", p, html_quote(name->ptr + 1), "</a>\n", NULL); +	type = Strsubstr(name, 0, 1); +	q = Strnew_m_charp("gopher://", host->ptr, ":", port->ptr, file->ptr, type->ptr, NULL)->ptr; +	if(link) { +	    Strcat_m_charp(tmp, "<a href=\"", +			   html_quote(url_encode(q, NULL, *charset)), +			   "\">", p, " ", html_quote(name->ptr + 1), "</a><br>\n", NULL); +	} else { +	    Strcat_m_charp(tmp, "<p>", html_quote(name->ptr + 1), "</p>\n", NULL); +	}      }    gopher_end: @@ -931,14 +931,6 @@ 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]/ */ @@ -1570,6 +1562,7 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current,      Str tmp;      int sock, scheme;      char *p, *q, *u; +    char end;      URLFile uf;      HRequest hr0;  #ifdef USE_SSL @@ -1833,6 +1826,27 @@ 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) { +	    case '0': +	    case '1': +	    case 'm': +	    case 's': +	    case 'g': +	    case 'h': +	      pu->file[strlen(pu->file)-1] = '\0'; +	      break; +	    default: +	      if('0' <= end && end <= '9') +		pu->file[strlen(pu->file)-1] = '\0'; +	      else +		end = '\0'; +	      break; +	  } +	} else { +	  end = '\0'; +	}  	if (non_null(GOPHER_proxy) &&  	    !Do_not_use_proxy &&  	    pu->host != NULL && !check_no_proxy(pu->host)) { @@ -1855,6 +1869,9 @@ 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; +	}  	break;  #endif				/* USE_GOPHER */  #ifdef USE_NNTP | 
