Changelog
+Daniel Fandrich (26 Aug 2008)
+- Fixed out of memory problems that caused torture test failures in tests
+ 1021 and 1067.
+
Yang Tse (26 Aug 2008)
- Added check and symbol definition for WIN32 file API usage in configure,
supporting configure's --disable-largefile option for WIN32 targets also.
}
/* Used within the multi interface. Try next IP address, return TRUE if no
- more address exists */
+ more address exists or error */
static bool trynextip(struct connectdata *conn,
int sockindex,
bool *connected)
conn->sock[sockindex] = sockfd;
conn->ip_addr = ai;
- Curl_store_ip_addr(conn);
- return FALSE;
+ return Curl_store_ip_addr(conn) != CURLE_OK;
}
ai = ai->ai_next;
}
long timeout_ms;
long timeout_per_addr;
+ DEBUGASSERT(sockconn);
*connected = FALSE; /* default to not connected */
/* get the timeout left */
before = after;
} /* end of connect-to-each-address loop */
+ *sockconn = sockfd; /* the socket descriptor we've connected */
+
if(sockfd == CURL_SOCKET_BAD) {
/* no good connect was made */
- *sockconn = CURL_SOCKET_BAD;
failf(data, "couldn't connect to host");
return CURLE_COULDNT_CONNECT;
}
if(addr)
*addr = curr_addr;
- /* allow NULL-pointers to get passed in */
- if(sockconn)
- *sockconn = sockfd; /* the socket descriptor we've connected */
-
data->info.numconnects++; /* to track the number of connections made */
return CURLE_OK;
free(data->change.referer);
data->change.referer = strdup(data->change.url);
+ if (!data->change.referer) {
+ data->change.referer_alloc = FALSE;
+ return CURLE_OUT_OF_MEMORY;
+ }
data->change.referer_alloc = TRUE; /* yes, free this later */
}
}
}
}
+ /* Cleanup possible redirect junk */
+ if(data->req.newurl) {
+ free(data->req.newurl);
+ data->req.newurl = NULL;
+ }
+
if(conn->handler->disconnect)
/* This is set if protocol-specific cleanups should be made */
conn->handler->disconnect(conn);
}
#endif
- return CURLE_OK;
+ return result;
}
CURLcode Curl_connect(struct SessionHandle *data,