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 */ | 
