http: drop support for curl < 7.16.0

In the last commit we dropped support for curl < 7.11.1, let's
continue that and drop support for versions older than 7.16.0. This
allows us to get rid of some now-obsolete #ifdefs.

Choosing 7.16.0 is a somewhat arbitrary cutoff:

  1. It came out in October of 2006, almost 15 years ago.
     Besides being a nice round number, around 10 years is
     a common end-of-life support period, even for conservative
     distributions.

  2. That version introduced the curl_multi interface, which
     gives us a lot of bang for the buck in removing #ifdefs

RHEL 5 came with curl 7.15.5[1] (released in August 2006). RHEL 5's
extended life cycle program ended on 2020-11-30[1]. RHEL 6 comes with
curl 7.19.7 (released in November 2009), and RHEL 7 comes with
7.29.0 (released in February 2013).

1. http://lore.kernel.org/git/873e1f31-2a96-5b72-2f20-a5816cad1b51@jupiterrise.com

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jeff King
2021-07-30 11:31:54 +02:00
committed by Junio C Hamano
parent 1119a15b5c
commit 013c7e2b07
6 changed files with 2 additions and 122 deletions

View File

@ -203,10 +203,8 @@ static void curl_setup_http(CURL *curl, const char *url,
curl_easy_setopt(curl, CURLOPT_INFILE, buffer); curl_easy_setopt(curl, CURLOPT_INFILE, buffer);
curl_easy_setopt(curl, CURLOPT_INFILESIZE, buffer->buf.len); curl_easy_setopt(curl, CURLOPT_INFILESIZE, buffer->buf.len);
curl_easy_setopt(curl, CURLOPT_READFUNCTION, fread_buffer); curl_easy_setopt(curl, CURLOPT_READFUNCTION, fread_buffer);
#ifndef NO_CURL_IOCTL
curl_easy_setopt(curl, CURLOPT_IOCTLFUNCTION, ioctl_buffer); curl_easy_setopt(curl, CURLOPT_IOCTLFUNCTION, ioctl_buffer);
curl_easy_setopt(curl, CURLOPT_IOCTLDATA, buffer); curl_easy_setopt(curl, CURLOPT_IOCTLDATA, buffer);
#endif
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_fn); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_fn);
curl_easy_setopt(curl, CURLOPT_NOBODY, 0); curl_easy_setopt(curl, CURLOPT_NOBODY, 0);
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, custom_req); curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, custom_req);
@ -249,8 +247,6 @@ static void process_response(void *callback_data)
finish_request(request); finish_request(request);
} }
#ifdef USE_CURL_MULTI
static void start_fetch_loose(struct transfer_request *request) static void start_fetch_loose(struct transfer_request *request)
{ {
struct active_request_slot *slot; struct active_request_slot *slot;
@ -299,7 +295,6 @@ static void start_mkcol(struct transfer_request *request)
FREE_AND_NULL(request->url); FREE_AND_NULL(request->url);
} }
} }
#endif
static void start_fetch_packed(struct transfer_request *request) static void start_fetch_packed(struct transfer_request *request)
{ {
@ -605,7 +600,6 @@ static void finish_request(struct transfer_request *request)
} }
} }
#ifdef USE_CURL_MULTI
static int is_running_queue; static int is_running_queue;
static int fill_active_slot(void *unused) static int fill_active_slot(void *unused)
{ {
@ -629,7 +623,6 @@ static int fill_active_slot(void *unused)
} }
return 0; return 0;
} }
#endif
static void get_remote_object_list(unsigned char parent); static void get_remote_object_list(unsigned char parent);
@ -658,10 +651,8 @@ static void add_fetch_request(struct object *obj)
request->next = request_queue_head; request->next = request_queue_head;
request_queue_head = request; request_queue_head = request;
#ifdef USE_CURL_MULTI
fill_active_slots(); fill_active_slots();
step_active_slots(); step_active_slots();
#endif
} }
static int add_send_request(struct object *obj, struct remote_lock *lock) static int add_send_request(struct object *obj, struct remote_lock *lock)
@ -696,10 +687,8 @@ static int add_send_request(struct object *obj, struct remote_lock *lock)
request->next = request_queue_head; request->next = request_queue_head;
request_queue_head = request; request_queue_head = request;
#ifdef USE_CURL_MULTI
fill_active_slots(); fill_active_slots();
step_active_slots(); step_active_slots();
#endif
return 1; return 1;
} }
@ -1682,21 +1671,15 @@ static int delete_remote_branch(const char *pattern, int force)
static void run_request_queue(void) static void run_request_queue(void)
{ {
#ifdef USE_CURL_MULTI
is_running_queue = 1; is_running_queue = 1;
fill_active_slots(); fill_active_slots();
add_fill_function(NULL, fill_active_slot); add_fill_function(NULL, fill_active_slot);
#endif
do { do {
finish_all_active_slots(); finish_all_active_slots();
#ifdef USE_CURL_MULTI
fill_active_slots(); fill_active_slots();
#endif
} while (request_queue_head && !aborted); } while (request_queue_head && !aborted);
#ifdef USE_CURL_MULTI
is_running_queue = 0; is_running_queue = 0;
#endif
} }
int cmd_main(int argc, const char **argv) int cmd_main(int argc, const char **argv)
@ -1770,10 +1753,6 @@ int cmd_main(int argc, const char **argv)
break; break;
} }
#ifndef USE_CURL_MULTI
die("git-push is not available for http/https repository when not compiled with USE_CURL_MULTI");
#endif
if (!repo->url) if (!repo->url)
usage(http_push_usage); usage(http_push_usage);
@ -1786,9 +1765,7 @@ int cmd_main(int argc, const char **argv)
http_init(NULL, repo->url, 1); http_init(NULL, repo->url, 1);
#ifdef USE_CURL_MULTI
is_running_queue = 0; is_running_queue = 0;
#endif
/* Verify DAV compliance/lock support */ /* Verify DAV compliance/lock support */
if (!locking_available()) { if (!locking_available()) {

View File

@ -127,7 +127,6 @@ static void release_object_request(struct object_request *obj_req)
free(obj_req); free(obj_req);
} }
#ifdef USE_CURL_MULTI
static int fill_active_slot(struct walker *walker) static int fill_active_slot(struct walker *walker)
{ {
struct object_request *obj_req; struct object_request *obj_req;
@ -146,7 +145,6 @@ static int fill_active_slot(struct walker *walker)
} }
return 0; return 0;
} }
#endif
static void prefetch(struct walker *walker, unsigned char *sha1) static void prefetch(struct walker *walker, unsigned char *sha1)
{ {
@ -163,10 +161,8 @@ static void prefetch(struct walker *walker, unsigned char *sha1)
http_is_verbose = walker->get_verbosely; http_is_verbose = walker->get_verbosely;
list_add_tail(&newreq->node, &object_queue_head); list_add_tail(&newreq->node, &object_queue_head);
#ifdef USE_CURL_MULTI
fill_active_slots(); fill_active_slots();
step_active_slots(); step_active_slots();
#endif
} }
static int is_alternate_allowed(const char *url) static int is_alternate_allowed(const char *url)
@ -357,11 +353,9 @@ static void fetch_alternates(struct walker *walker, const char *base)
* wait for them to arrive and return to processing this request's * wait for them to arrive and return to processing this request's
* curl message * curl message
*/ */
#ifdef USE_CURL_MULTI
while (cdata->got_alternates == 0) { while (cdata->got_alternates == 0) {
step_active_slots(); step_active_slots();
} }
#endif
/* Nothing to do if they've already been fetched */ /* Nothing to do if they've already been fetched */
if (cdata->got_alternates == 1) if (cdata->got_alternates == 1)
@ -505,12 +499,8 @@ static int fetch_object(struct walker *walker, unsigned char *hash)
return 0; return 0;
} }
#ifdef USE_CURL_MULTI
while (obj_req->state == WAITING) while (obj_req->state == WAITING)
step_active_slots(); step_active_slots();
#else
start_object_request(walker, obj_req);
#endif
/* /*
* obj_req->req might change when fetching alternates in the callback * obj_req->req might change when fetching alternates in the callback
@ -623,9 +613,7 @@ struct walker *get_http_walker(const char *url)
walker->cleanup = cleanup; walker->cleanup = cleanup;
walker->data = data; walker->data = data;
#ifdef USE_CURL_MULTI
add_fill_function(walker, (int (*)(void *)) fill_active_slot); add_fill_function(walker, (int (*)(void *)) fill_active_slot);
#endif
return walker; return walker;
} }

56
http.c
View File

@ -26,10 +26,8 @@ ssize_t http_post_buffer = 16 * LARGE_PACKET_MAX;
static int min_curl_sessions = 1; static int min_curl_sessions = 1;
static int curl_session_count; static int curl_session_count;
#ifdef USE_CURL_MULTI
static int max_requests = -1; static int max_requests = -1;
static CURLM *curlm; static CURLM *curlm;
#endif
#ifndef NO_CURL_EASY_DUPHANDLE #ifndef NO_CURL_EASY_DUPHANDLE
static CURL *curl_default; static CURL *curl_default;
#endif #endif
@ -117,14 +115,6 @@ static int curl_empty_auth = -1;
enum http_follow_config http_follow_config = HTTP_FOLLOW_INITIAL; enum http_follow_config http_follow_config = HTTP_FOLLOW_INITIAL;
#if LIBCURL_VERSION_NUM >= 0x071700
/* Use CURLOPT_KEYPASSWD as is */
#elif LIBCURL_VERSION_NUM >= 0x070903
#define CURLOPT_KEYPASSWD CURLOPT_SSLKEYPASSWD
#else
#define CURLOPT_KEYPASSWD CURLOPT_SSLCERTPASSWD
#endif
static struct credential cert_auth = CREDENTIAL_INIT; static struct credential cert_auth = CREDENTIAL_INIT;
static int ssl_cert_password_required; static int ssl_cert_password_required;
static unsigned long http_auth_methods = CURLAUTH_ANY; static unsigned long http_auth_methods = CURLAUTH_ANY;
@ -168,7 +158,6 @@ size_t fread_buffer(char *ptr, size_t eltsize, size_t nmemb, void *buffer_)
return size / eltsize; return size / eltsize;
} }
#ifndef NO_CURL_IOCTL
curlioerr ioctl_buffer(CURL *handle, int cmd, void *clientp) curlioerr ioctl_buffer(CURL *handle, int cmd, void *clientp)
{ {
struct buffer *buffer = clientp; struct buffer *buffer = clientp;
@ -185,7 +174,6 @@ curlioerr ioctl_buffer(CURL *handle, int cmd, void *clientp)
return CURLIOE_UNKNOWNCMD; return CURLIOE_UNKNOWNCMD;
} }
} }
#endif
size_t fwrite_buffer(char *ptr, size_t eltsize, size_t nmemb, void *buffer_) size_t fwrite_buffer(char *ptr, size_t eltsize, size_t nmemb, void *buffer_)
{ {
@ -233,12 +221,9 @@ static void finish_active_slot(struct active_request_slot *slot)
static void xmulti_remove_handle(struct active_request_slot *slot) static void xmulti_remove_handle(struct active_request_slot *slot)
{ {
#ifdef USE_CURL_MULTI
curl_multi_remove_handle(curlm, slot->curl); curl_multi_remove_handle(curlm, slot->curl);
#endif
} }
#ifdef USE_CURL_MULTI
static void process_curl_messages(void) static void process_curl_messages(void)
{ {
int num_messages; int num_messages;
@ -266,7 +251,6 @@ static void process_curl_messages(void)
curl_message = curl_multi_info_read(curlm, &num_messages); curl_message = curl_multi_info_read(curlm, &num_messages);
} }
} }
#endif
static int http_options(const char *var, const char *value, void *cb) static int http_options(const char *var, const char *value, void *cb)
{ {
@ -315,18 +299,14 @@ static int http_options(const char *var, const char *value, void *cb)
if (!strcmp("http.minsessions", var)) { if (!strcmp("http.minsessions", var)) {
min_curl_sessions = git_config_int(var, value); min_curl_sessions = git_config_int(var, value);
#ifndef USE_CURL_MULTI
if (min_curl_sessions > 1) if (min_curl_sessions > 1)
min_curl_sessions = 1; min_curl_sessions = 1;
#endif
return 0; return 0;
} }
#ifdef USE_CURL_MULTI
if (!strcmp("http.maxrequests", var)) { if (!strcmp("http.maxrequests", var)) {
max_requests = git_config_int(var, value); max_requests = git_config_int(var, value);
return 0; return 0;
} }
#endif
if (!strcmp("http.lowspeedlimit", var)) { if (!strcmp("http.lowspeedlimit", var)) {
curl_low_speed_limit = (long)git_config_int(var, value); curl_low_speed_limit = (long)git_config_int(var, value);
return 0; return 0;
@ -574,7 +554,7 @@ static void set_curl_keepalive(CURL *c)
curl_easy_setopt(c, CURLOPT_TCP_KEEPALIVE, 1); curl_easy_setopt(c, CURLOPT_TCP_KEEPALIVE, 1);
} }
#elif LIBCURL_VERSION_NUM >= 0x071000 #else
static int sockopt_callback(void *client, curl_socket_t fd, curlsocktype type) static int sockopt_callback(void *client, curl_socket_t fd, curlsocktype type)
{ {
int ka = 1; int ka = 1;
@ -595,12 +575,6 @@ static void set_curl_keepalive(CURL *c)
{ {
curl_easy_setopt(c, CURLOPT_SOCKOPTFUNCTION, sockopt_callback); curl_easy_setopt(c, CURLOPT_SOCKOPTFUNCTION, sockopt_callback);
} }
#else
static void set_curl_keepalive(CURL *c)
{
/* not supported on older curl versions */
}
#endif #endif
static void redact_sensitive_header(struct strbuf *header) static void redact_sensitive_header(struct strbuf *header)
@ -1121,7 +1095,6 @@ void http_init(struct remote *remote, const char *url, int proactive_auth)
no_pragma_header = curl_slist_append(http_copy_default_headers(), no_pragma_header = curl_slist_append(http_copy_default_headers(),
"Pragma:"); "Pragma:");
#ifdef USE_CURL_MULTI
{ {
char *http_max_requests = getenv("GIT_HTTP_MAX_REQUESTS"); char *http_max_requests = getenv("GIT_HTTP_MAX_REQUESTS");
if (http_max_requests != NULL) if (http_max_requests != NULL)
@ -1131,7 +1104,6 @@ void http_init(struct remote *remote, const char *url, int proactive_auth)
curlm = curl_multi_init(); curlm = curl_multi_init();
if (!curlm) if (!curlm)
die("curl_multi_init failed"); die("curl_multi_init failed");
#endif
if (getenv("GIT_SSL_NO_VERIFY")) if (getenv("GIT_SSL_NO_VERIFY"))
curl_ssl_verify = 0; curl_ssl_verify = 0;
@ -1154,10 +1126,8 @@ void http_init(struct remote *remote, const char *url, int proactive_auth)
curl_ssl_verify = 1; curl_ssl_verify = 1;
curl_session_count = 0; curl_session_count = 0;
#ifdef USE_CURL_MULTI
if (max_requests < 1) if (max_requests < 1)
max_requests = DEFAULT_MAX_REQUESTS; max_requests = DEFAULT_MAX_REQUESTS;
#endif
set_from_env(&http_proxy_ssl_cert, "GIT_PROXY_SSL_CERT"); set_from_env(&http_proxy_ssl_cert, "GIT_PROXY_SSL_CERT");
set_from_env(&http_proxy_ssl_key, "GIT_PROXY_SSL_KEY"); set_from_env(&http_proxy_ssl_key, "GIT_PROXY_SSL_KEY");
@ -1201,9 +1171,7 @@ void http_cleanup(void)
curl_easy_cleanup(curl_default); curl_easy_cleanup(curl_default);
#endif #endif
#ifdef USE_CURL_MULTI
curl_multi_cleanup(curlm); curl_multi_cleanup(curlm);
#endif
curl_global_cleanup(); curl_global_cleanup();
string_list_clear(&extra_http_headers, 0); string_list_clear(&extra_http_headers, 0);
@ -1250,7 +1218,6 @@ struct active_request_slot *get_active_slot(void)
struct active_request_slot *slot = active_queue_head; struct active_request_slot *slot = active_queue_head;
struct active_request_slot *newslot; struct active_request_slot *newslot;
#ifdef USE_CURL_MULTI
int num_transfers; int num_transfers;
/* Wait for a slot to open up if the queue is full */ /* Wait for a slot to open up if the queue is full */
@ -1259,7 +1226,6 @@ struct active_request_slot *get_active_slot(void)
if (num_transfers < active_requests) if (num_transfers < active_requests)
process_curl_messages(); process_curl_messages();
} }
#endif
while (slot != NULL && slot->in_use) while (slot != NULL && slot->in_use)
slot = slot->next; slot = slot->next;
@ -1330,7 +1296,6 @@ struct active_request_slot *get_active_slot(void)
int start_active_slot(struct active_request_slot *slot) int start_active_slot(struct active_request_slot *slot)
{ {
#ifdef USE_CURL_MULTI
CURLMcode curlm_result = curl_multi_add_handle(curlm, slot->curl); CURLMcode curlm_result = curl_multi_add_handle(curlm, slot->curl);
int num_transfers; int num_transfers;
@ -1348,11 +1313,9 @@ int start_active_slot(struct active_request_slot *slot)
* something. * something.
*/ */
curl_multi_perform(curlm, &num_transfers); curl_multi_perform(curlm, &num_transfers);
#endif
return 1; return 1;
} }
#ifdef USE_CURL_MULTI
struct fill_chain { struct fill_chain {
void *data; void *data;
int (*fill)(void *); int (*fill)(void *);
@ -1411,11 +1374,9 @@ void step_active_slots(void)
fill_active_slots(); fill_active_slots();
} }
} }
#endif
void run_active_slot(struct active_request_slot *slot) void run_active_slot(struct active_request_slot *slot)
{ {
#ifdef USE_CURL_MULTI
fd_set readfds; fd_set readfds;
fd_set writefds; fd_set writefds;
fd_set excfds; fd_set excfds;
@ -1428,7 +1389,6 @@ void run_active_slot(struct active_request_slot *slot)
step_active_slots(); step_active_slots();
if (slot->in_use) { if (slot->in_use) {
#if LIBCURL_VERSION_NUM >= 0x070f04
long curl_timeout; long curl_timeout;
curl_multi_timeout(curlm, &curl_timeout); curl_multi_timeout(curlm, &curl_timeout);
if (curl_timeout == 0) { if (curl_timeout == 0) {
@ -1440,10 +1400,6 @@ void run_active_slot(struct active_request_slot *slot)
select_timeout.tv_sec = curl_timeout / 1000; select_timeout.tv_sec = curl_timeout / 1000;
select_timeout.tv_usec = (curl_timeout % 1000) * 1000; select_timeout.tv_usec = (curl_timeout % 1000) * 1000;
} }
#else
select_timeout.tv_sec = 0;
select_timeout.tv_usec = 50000;
#endif
max_fd = -1; max_fd = -1;
FD_ZERO(&readfds); FD_ZERO(&readfds);
@ -1466,12 +1422,6 @@ void run_active_slot(struct active_request_slot *slot)
select(max_fd+1, &readfds, &writefds, &excfds, &select_timeout); select(max_fd+1, &readfds, &writefds, &excfds, &select_timeout);
} }
} }
#else
while (slot->in_use) {
slot->curl_result = curl_easy_perform(slot->curl);
finish_active_slot(slot);
}
#endif
} }
static void release_active_slot(struct active_request_slot *slot) static void release_active_slot(struct active_request_slot *slot)
@ -1485,9 +1435,7 @@ static void release_active_slot(struct active_request_slot *slot)
curl_session_count--; curl_session_count--;
} }
} }
#ifdef USE_CURL_MULTI
fill_active_slots(); fill_active_slots();
#endif
} }
void finish_all_active_slots(void) void finish_all_active_slots(void)
@ -1613,12 +1561,10 @@ static int handle_curl_result(struct slot_results *results)
} else { } else {
if (results->http_connectcode == 407) if (results->http_connectcode == 407)
credential_reject(&proxy_auth); credential_reject(&proxy_auth);
#if LIBCURL_VERSION_NUM >= 0x070c00
if (!curl_errorstr[0]) if (!curl_errorstr[0])
strlcpy(curl_errorstr, strlcpy(curl_errorstr,
curl_easy_strerror(results->curl_result), curl_easy_strerror(results->curl_result),
sizeof(curl_errorstr)); sizeof(curl_errorstr));
#endif
return HTTP_ERROR; return HTTP_ERROR;
} }
} }

25
http.h
View File

@ -10,31 +10,12 @@
#include "remote.h" #include "remote.h"
#include "url.h" #include "url.h"
/*
* We detect based on the cURL version if multi-transfer is
* usable in this implementation and define this symbol accordingly.
* This shouldn't be set by the Makefile or by the user (e.g. via CFLAGS).
*/
#undef USE_CURL_MULTI
#if LIBCURL_VERSION_NUM >= 0x071000
#define USE_CURL_MULTI
#define DEFAULT_MAX_REQUESTS 5 #define DEFAULT_MAX_REQUESTS 5
#endif
#if LIBCURL_VERSION_NUM >= 0x070c00 #if LIBCURL_VERSION_NUM == 0x071000
#define curl_global_init(a) curl_global_init_mem(a, xmalloc, free, \
xrealloc, xstrdup, xcalloc)
#endif
#if (LIBCURL_VERSION_NUM < 0x070c04) || (LIBCURL_VERSION_NUM == 0x071000)
#define NO_CURL_EASY_DUPHANDLE #define NO_CURL_EASY_DUPHANDLE
#endif #endif
#if LIBCURL_VERSION_NUM < 0x070c03
#define NO_CURL_IOCTL
#endif
/* /*
* CURLOPT_USE_SSL was known as CURLOPT_FTP_SSL up to 7.16.4, * CURLOPT_USE_SSL was known as CURLOPT_FTP_SSL up to 7.16.4,
* and the constants were known as CURLFTPSSL_* * and the constants were known as CURLFTPSSL_*
@ -72,9 +53,7 @@ struct buffer {
size_t fread_buffer(char *ptr, size_t eltsize, size_t nmemb, void *strbuf); size_t fread_buffer(char *ptr, size_t eltsize, size_t nmemb, void *strbuf);
size_t fwrite_buffer(char *ptr, size_t eltsize, size_t nmemb, void *strbuf); size_t fwrite_buffer(char *ptr, size_t eltsize, size_t nmemb, void *strbuf);
size_t fwrite_null(char *ptr, size_t eltsize, size_t nmemb, void *strbuf); size_t fwrite_null(char *ptr, size_t eltsize, size_t nmemb, void *strbuf);
#ifndef NO_CURL_IOCTL
curlioerr ioctl_buffer(CURL *handle, int cmd, void *clientp); curlioerr ioctl_buffer(CURL *handle, int cmd, void *clientp);
#endif
/* Slot lifecycle functions */ /* Slot lifecycle functions */
struct active_request_slot *get_active_slot(void); struct active_request_slot *get_active_slot(void);
@ -91,11 +70,9 @@ void finish_all_active_slots(void);
int run_one_slot(struct active_request_slot *slot, int run_one_slot(struct active_request_slot *slot,
struct slot_results *results); struct slot_results *results);
#ifdef USE_CURL_MULTI
void fill_active_slots(void); void fill_active_slots(void);
void add_fill_function(void *data, int (*fill)(void *)); void add_fill_function(void *data, int (*fill)(void *));
void step_active_slots(void); void step_active_slots(void);
#endif
void http_init(struct remote *remote, const char *url, void http_init(struct remote *remote, const char *url,
int proactive_auth); int proactive_auth);

View File

@ -1526,11 +1526,7 @@ static int curl_append_msgs_to_imap(struct imap_server_conf *server,
if (cred.username) { if (cred.username) {
if (res == CURLE_OK) if (res == CURLE_OK)
credential_approve(&cred); credential_approve(&cred);
#if LIBCURL_VERSION_NUM >= 0x070d01
else if (res == CURLE_LOGIN_DENIED) else if (res == CURLE_LOGIN_DENIED)
#else
else
#endif
credential_reject(&cred); credential_reject(&cred);
} }

View File

@ -706,7 +706,6 @@ static size_t rpc_out(void *ptr, size_t eltsize,
return avail; return avail;
} }
#ifndef NO_CURL_IOCTL
static curlioerr rpc_ioctl(CURL *handle, int cmd, void *clientp) static curlioerr rpc_ioctl(CURL *handle, int cmd, void *clientp)
{ {
struct rpc_state *rpc = clientp; struct rpc_state *rpc = clientp;
@ -727,7 +726,6 @@ static curlioerr rpc_ioctl(CURL *handle, int cmd, void *clientp)
return CURLIOE_UNKNOWNCMD; return CURLIOE_UNKNOWNCMD;
} }
} }
#endif
struct check_pktline_state { struct check_pktline_state {
char len_buf[4]; char len_buf[4];
@ -946,10 +944,8 @@ retry:
rpc->initial_buffer = 1; rpc->initial_buffer = 1;
curl_easy_setopt(slot->curl, CURLOPT_READFUNCTION, rpc_out); curl_easy_setopt(slot->curl, CURLOPT_READFUNCTION, rpc_out);
curl_easy_setopt(slot->curl, CURLOPT_INFILE, rpc); curl_easy_setopt(slot->curl, CURLOPT_INFILE, rpc);
#ifndef NO_CURL_IOCTL
curl_easy_setopt(slot->curl, CURLOPT_IOCTLFUNCTION, rpc_ioctl); curl_easy_setopt(slot->curl, CURLOPT_IOCTLFUNCTION, rpc_ioctl);
curl_easy_setopt(slot->curl, CURLOPT_IOCTLDATA, rpc); curl_easy_setopt(slot->curl, CURLOPT_IOCTLDATA, rpc);
#endif
if (options.verbosity > 1) { if (options.verbosity > 1) {
fprintf(stderr, "POST %s (chunked)\n", rpc->service_name); fprintf(stderr, "POST %s (chunked)\n", rpc->service_name);
fflush(stderr); fflush(stderr);