Now with less infinite recursion

This commit is contained in:
Tim Angus 2015-09-26 10:54:16 +01:00
parent c70e10d15e
commit 9732f1ba69
1 changed files with 39 additions and 13 deletions

View File

@ -217,6 +217,32 @@ static size_t CL_cURL_CallbackWrite(void *buffer, size_t size, size_t nmemb,
return size*nmemb; return size*nmemb;
} }
CURLcode qcurl_easy_setopt_warn(CURL *curl, CURLoption option, ...)
{
CURLcode result;
va_list argp;
va_start(argp, option);
if(option < CURLOPTTYPE_OBJECTPOINT) {
long longValue = va_arg(argp, long);
result = qcurl_easy_setopt(curl, option, longValue);
} else if(option < CURLOPTTYPE_OFF_T) {
void *pointerValue = va_arg(argp, void *);
result = qcurl_easy_setopt(curl, option, pointerValue);
} else {
curl_off_t offsetValue = va_arg(argp, curl_off_t);
result = qcurl_easy_setopt(curl, option, offsetValue);
}
if(result != CURLE_OK) {
Com_DPrintf("qcurl_easy_setopt failed: %s\n", qcurl_easy_strerror(result));
}
va_end(argp);
return result;
}
void CL_cURL_BeginDownload( const char *localName, const char *remoteURL ) void CL_cURL_BeginDownload( const char *localName, const char *remoteURL )
{ {
CURLMcode result; CURLMcode result;
@ -256,23 +282,23 @@ void CL_cURL_BeginDownload( const char *localName, const char *remoteURL )
} }
if(com_developer->integer) if(com_developer->integer)
qcurl_easy_setopt(clc.downloadCURL, CURLOPT_VERBOSE, 1); qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_VERBOSE, 1);
qcurl_easy_setopt(clc.downloadCURL, CURLOPT_URL, clc.downloadURL); qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_URL, clc.downloadURL);
qcurl_easy_setopt(clc.downloadCURL, CURLOPT_TRANSFERTEXT, 0); qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_TRANSFERTEXT, 0);
qcurl_easy_setopt(clc.downloadCURL, CURLOPT_REFERER, va("ioQ3://%s", qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_REFERER, va("ioQ3://%s",
NET_AdrToString(clc.serverAddress))); NET_AdrToString(clc.serverAddress)));
qcurl_easy_setopt(clc.downloadCURL, CURLOPT_USERAGENT, va("%s %s", qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_USERAGENT, va("%s %s",
Q3_VERSION, qcurl_version())); Q3_VERSION, qcurl_version()));
qcurl_easy_setopt(clc.downloadCURL, CURLOPT_WRITEFUNCTION, qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_WRITEFUNCTION,
CL_cURL_CallbackWrite); CL_cURL_CallbackWrite);
qcurl_easy_setopt(clc.downloadCURL, CURLOPT_WRITEDATA, &clc.download); qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_WRITEDATA, &clc.download);
qcurl_easy_setopt(clc.downloadCURL, CURLOPT_NOPROGRESS, 0); qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_NOPROGRESS, 0);
qcurl_easy_setopt(clc.downloadCURL, CURLOPT_PROGRESSFUNCTION, qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_PROGRESSFUNCTION,
CL_cURL_CallbackProgress); CL_cURL_CallbackProgress);
qcurl_easy_setopt(clc.downloadCURL, CURLOPT_PROGRESSDATA, NULL); qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_PROGRESSDATA, NULL);
qcurl_easy_setopt(clc.downloadCURL, CURLOPT_FAILONERROR, 1); qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_FAILONERROR, 1);
qcurl_easy_setopt(clc.downloadCURL, CURLOPT_FOLLOWLOCATION, 1); qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_FOLLOWLOCATION, 1);
qcurl_easy_setopt(clc.downloadCURL, CURLOPT_MAXREDIRS, 5); qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_MAXREDIRS, 5);
clc.downloadCURLM = qcurl_multi_init(); clc.downloadCURLM = qcurl_multi_init();
if(!clc.downloadCURLM) { if(!clc.downloadCURLM) {
qcurl_easy_cleanup(clc.downloadCURL); qcurl_easy_cleanup(clc.downloadCURL);