rc = curl_multi_add_handle(multi, data);
if(!rc) {
struct SingleRequest *k = &data->req;
+ CURLcode result;
/* pass in NULL for 'conn' here since we do not want to init the
connection, only this transfer */
- Curl_init_do(data, NULL);
+ result = Curl_init_do(data, NULL);
+ if(result) {
+ curl_multi_remove_handle(multi, data);
+ return CURLM_INTERNAL_ERROR;
+ }
/* take this handle to the perform state right away */
multistate(data, MSTATE_PERFORMING);
/* conn_protocol can only provide "old" protocols */
data->info.conn_protocol = (conn->handler->protocol) & CURLPROTO_MASK;
result = conn->handler->connect_it(data, &done);
+ if(result)
+ goto out;
/* Setup a "faked" transfer that will do nothing */
+ Curl_attach_connection(data, conn);
+ result = Curl_cpool_add(data, conn);
if(!result) {
- Curl_attach_connection(data, conn);
- result = Curl_cpool_add(data, conn);
+ /* Setup whatever necessary for a resumed transfer */
+ result = setup_range(data);
if(!result) {
- /* Setup whatever necessary for a resumed transfer */
- result = setup_range(data);
- }
-
- if(result) {
- DEBUGASSERT(conn->handler->done);
- /* we ignore the return code for the protocol-specific DONE */
- (void)conn->handler->done(data, result, FALSE);
- goto out;
+ Curl_xfer_setup_nop(data);
+ result = Curl_init_do(data, conn);
}
- Curl_xfer_setup_nop(data);
}
- /* since we skip do_init() */
- Curl_init_do(data, conn);
-
+ if(result) {
+ DEBUGASSERT(conn->handler->done);
+ /* we ignore the return code for the protocol-specific DONE */
+ (void)conn->handler->done(data, result, FALSE);
+ }
goto out;
}
#endif
}
/* Setup and init stuff before DO starts, in preparing for the transfer. */
- Curl_init_do(data, conn);
+ result = Curl_init_do(data, conn);
+ if(result)
+ goto out;
/*
* Setup whatever necessary for a resumed transfer
return strlen(testdata);
}
+static int seek_callback(void *ptr, curl_off_t offset, int origin)
+{
+ (void)ptr;
+ (void)offset;
+ if(origin != SEEK_SET)
+ return CURL_SEEKFUNC_FAIL;
+ return CURL_SEEKFUNC_OK;
+}
+
CURLcode test(char *URL)
{
CURLcode res;
test_setopt(curl, CURLOPT_URL, URL);
test_setopt(curl, CURLOPT_UPLOAD, 1L);
test_setopt(curl, CURLOPT_READFUNCTION, read_callback);
+ test_setopt(curl, CURLOPT_SEEKFUNCTION, seek_callback);
test_setopt(curl, CURLOPT_INFILESIZE, (long)strlen(testdata));
test_setopt(curl, CURLOPT_CUSTOMREQUEST, "CURL");