diff options
author | Daniel Stenberg <daniel@haxx.se> | 2010-12-20 22:17:41 +0100 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2010-12-20 22:22:02 +0100 |
commit | af54fbbcb582a03d2033691bbc0835b2bd4f0b7f (patch) | |
tree | 8d4cf9ba7143d0d9a6e116bffc067b18d976bda9 /lib | |
parent | 1e739e781eb9a68b004a5c1827b70052873bf197 (diff) |
loadhostpairs: return errorcode
Make sure that Curl_cache_addr() errors are propagated to callers of
loadhostpairs().
(this loadhostpairs function caused a scan-build warning due to the
'dns' variable getting assigned but never used)
Diffstat (limited to 'lib')
-rw-r--r-- | lib/transfer.c | 45 |
1 files changed, 26 insertions, 19 deletions
diff --git a/lib/transfer.c b/lib/transfer.c index e4e3405d3..1c5815a05 100644 --- a/lib/transfer.c +++ b/lib/transfer.c @@ -1382,7 +1382,7 @@ Transfer(struct connectdata *conn) return CURLE_OK; } -static void loadhostpairs(struct SessionHandle *data) +static CURLcode loadhostpairs(struct SessionHandle *data) { struct curl_slist *hostp; char hostname[256]; @@ -1393,7 +1393,7 @@ static void loadhostpairs(struct SessionHandle *data) if(!hostp->data) continue; if(hostp->data[0] == '-') { - /* mark an entry for removal */ + /* TODO: mark an entry for removal */ } else if(3 == sscanf(hostp->data, "%255[^:]:%d:%255s", hostname, &port, address)) { @@ -1416,9 +1416,14 @@ static void loadhostpairs(struct SessionHandle *data) if(data->share) Curl_share_unlock(data, CURL_LOCK_DATA_DNS); + + if(!dns) + return CURLE_OUT_OF_MEMORY; } } data->change.resolve = NULL; /* dealt with now */ + + return CURLE_OK; } @@ -1460,31 +1465,33 @@ CURLcode Curl_pretransfer(struct SessionHandle *data) /* If there is a list of host pairs to deal with */ if(data->change.resolve) - loadhostpairs(data); + res = loadhostpairs(data); - /* Allow data->set.use_port to set which port to use. This needs to be - * disabled for example when we follow Location: headers to URLs using - * different ports! */ - data->state.allow_port = TRUE; + if(!res) { + /* Allow data->set.use_port to set which port to use. This needs to be + * disabled for example when we follow Location: headers to URLs using + * different ports! */ + data->state.allow_port = TRUE; #if defined(HAVE_SIGNAL) && defined(SIGPIPE) && !defined(HAVE_MSG_NOSIGNAL) - /************************************************************* - * Tell signal handler to ignore SIGPIPE - *************************************************************/ - if(!data->set.no_signal) - data->state.prev_signal = signal(SIGPIPE, SIG_IGN); + /************************************************************* + * Tell signal handler to ignore SIGPIPE + *************************************************************/ + if(!data->set.no_signal) + data->state.prev_signal = signal(SIGPIPE, SIG_IGN); #endif - Curl_initinfo(data); /* reset session-specific information "variables" */ - Curl_pgrsStartNow(data); + Curl_initinfo(data); /* reset session-specific information "variables" */ + Curl_pgrsStartNow(data); - if(data->set.timeout) - Curl_expire(data, data->set.timeout); + if(data->set.timeout) + Curl_expire(data, data->set.timeout); - if(data->set.connecttimeout) - Curl_expire(data, data->set.connecttimeout); + if(data->set.connecttimeout) + Curl_expire(data, data->set.connecttimeout); + } - return CURLE_OK; + return res; } /* |