diff options
| author | Fumitoshi UKAI <ukai@debian.or.jp> | 2002-11-06 15:03:25 +0000 | 
|---|---|---|
| committer | Fumitoshi UKAI <ukai@debian.or.jp> | 2002-11-06 15:03:25 +0000 | 
| commit | bcb1de20e2eaad2de66d59ff4b50e6b96201f690 (patch) | |
| tree | 124e7940dd0e2ff4f270de1ed81eec545c051124 | |
| parent | [w3m-dev 03380] fix configure (diff) | |
| download | w3m-bcb1de20e2eaad2de66d59ff4b50e6b96201f690.tar.gz w3m-bcb1de20e2eaad2de66d59ff4b50e6b96201f690.zip | |
[w3m-dev 03382] Interrupt in no_proxy_check()
* url.c (check_no_proxy): SIGINT trap by KeyAbort
From: Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
| -rw-r--r-- | ChangeLog | 7 | ||||
| -rw-r--r-- | url.c | 32 | 
2 files changed, 31 insertions, 8 deletions
| @@ -1,3 +1,8 @@ +2002-11-07  Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp> + +	* [w3m-dev 03382] Interrupt in no_proxy_check() +	* url.c (check_no_proxy): SIGINT trap by KeyAbort +  2002-11-06  Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>  	* [w3m-dev 03380] fix configure @@ -4360,4 +4365,4 @@ a	* [w3m-dev 03276] compile error on EWS4800  	* release-0-2-1  	* import w3m-0.2.1 -$Id: ChangeLog,v 1.481 2002/11/06 14:58:02 ukai Exp $ +$Id: ChangeLog,v 1.482 2002/11/06 15:03:25 ukai Exp $ @@ -1,4 +1,4 @@ -/* $Id: url.c,v 1.54 2002/11/04 08:47:38 ukai Exp $ */ +/* $Id: url.c,v 1.55 2002/11/06 15:03:26 ukai Exp $ */  #include "fm.h"  #include <sys/types.h>  #include <sys/socket.h> @@ -1943,6 +1943,8 @@ int  check_no_proxy(char *domain)  {      TextListItem *tl; +    volatile int ret = 0; +    MySignalHandler(*volatile trap) (SIGNAL_ARG) = NULL;      if (NO_proxy_domains == NULL || NO_proxy_domains->nitem == 0 ||  	domain == NULL) @@ -1957,6 +1959,13 @@ check_no_proxy(char *domain)      /*        * to check noproxy by network addr       */ +    if (SETJMP(AbortLoading) != 0) { +	ret = 0; +	goto end; +    } +    trap = signal(SIGINT, KeyAbort); +    if (fmInitialized) +	term_cbreak();      {  #ifndef INET6  	struct hostent *he; @@ -1965,8 +1974,10 @@ check_no_proxy(char *domain)  	char addr[4 * 16], buf[5];  	he = gethostbyname(domain); -	if (!he) -	    return (0); +	if (!he) { +	    ret = 0; +	    goto end; +	}  	for (h_addr_list = (unsigned char **)he->h_addr_list; *h_addr_list;  	     h_addr_list++) {  	    sprintf(addr, "%d", h_addr_list[0][0]); @@ -1975,8 +1986,10 @@ check_no_proxy(char *domain)  		strcat(addr, buf);  	    }  	    for (tl = NO_proxy_domains->first; tl != NULL; tl = tl->next) { -		if (strncmp(tl->ptr, addr, strlen(tl->ptr)) == 0) -		    return (1); +		if (strncmp(tl->ptr, addr, strlen(tl->ptr)) == 0) { +		    ret = 1; +		    goto end; +		}  	    }  	}  #else				/* INET6 */ @@ -2016,7 +2029,8 @@ check_no_proxy(char *domain)  		for (tl = NO_proxy_domains->first; tl != NULL; tl = tl->next) {  		    if (strncmp(tl->ptr, addr, strlen(tl->ptr)) == 0) {  			freeaddrinfo(res0); -			return 1; +			ret = 1; +			goto end;  		    }  		}  	    } @@ -2027,7 +2041,11 @@ check_no_proxy(char *domain)  	}  #endif				/* INET6 */      } -    return 0; +  end: +    if (fmInitialized) +	term_raw(); +    signal(SIGINT, trap); +    return ret;  }  char * | 
