more refactoring

This commit is contained in:
Fufu Fang 2021-09-03 16:29:00 +01:00
parent d403fa339b
commit dd8d887f94
4 changed files with 48 additions and 39 deletions

View File

@ -972,7 +972,9 @@ error.\n", recv, cf->blksz);
"thread %x: unlocking w_lock;\n", pthread_self());
PTHREAD_MUTEX_UNLOCK(&cf->w_lock);
pthread_detach(pthread_self());
if (pthread_detach(pthread_self())) {
lprintf(error, "%s\n", strerror(errno));
};
pthread_exit(NULL);
}

View File

@ -866,6 +866,7 @@ TransferStruct Link_download_full(Link *link)
lprintf(warning,
"cannot retrieve URL: %s, HTTP %ld\n", url, http_resp);
ts.size = 0;
FREE(ts.data);
curl_easy_cleanup(curl);
return ts;
}
@ -916,6 +917,46 @@ static CURL *Link_download_curl_setup(Link *link, size_t req_size, off_t offset,
return curl;
}
static curl_off_t Link_download_cleanup(CURL *curl, TransferStruct *header)
{
/*
* Check for range seek support
*/
if (!CONFIG.no_range_check) {
if (!strcasestr((header->data), "Accept-Ranges: bytes")) {
fprintf(stderr, "This web server does not support HTTP \
range requests\n");
exit(EXIT_FAILURE);
}
}
FREE(header->data);
long http_resp;
CURLcode ret = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_resp);
if (ret) {
lprintf(error, "%s", curl_easy_strerror(ret));
}
if (!((http_resp != HTTP_OK) ||
(http_resp != HTTP_PARTIAL_CONTENT) ||
(http_resp != HTTP_RANGE_NOT_SATISFIABLE))) {
char *url;
curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &url);
lprintf(warning, "Could not download %s, HTTP %ld\n", url, http_resp);
return -ENOENT;
}
curl_off_t recv;
ret = curl_easy_getinfo(curl, CURLINFO_SIZE_DOWNLOAD_T, &recv);
if (ret) {
lprintf(error, "%s", curl_easy_strerror(ret));
}
curl_easy_cleanup(curl);
return recv;
}
long
Link_download(Link *link, char *output_buf, size_t req_size, off_t offset)
{
@ -933,38 +974,7 @@ Link_download(Link *link, char *output_buf, size_t req_size, off_t offset)
transfer_blocking(curl);
/*
* Check for range seek support
*/
if (!CONFIG.no_range_check) {
if (!strcasestr((header.data), "Accept-Ranges: bytes")) {
fprintf(stderr, "This web server does not support HTTP \
range requests\n");
exit(EXIT_FAILURE);
}
}
FREE(header.data);
long http_resp;
CURLcode ret = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_resp);
if (ret) {
lprintf(error, "%s", curl_easy_strerror(ret));
}
if (!((http_resp != HTTP_OK) ||
(http_resp != HTTP_PARTIAL_CONTENT) ||
(http_resp != HTTP_RANGE_NOT_SATISFIABLE))) {
lprintf(warning,
"Could not download %s, HTTP %ld\n",
link->f_url, http_resp);
return -ENOENT;
}
curl_off_t recv;
ret = curl_easy_getinfo(curl, CURLINFO_SIZE_DOWNLOAD_T, &recv);
if (ret) {
lprintf(error, "%s", curl_easy_strerror(ret));
}
curl_off_t recv = Link_download_cleanup(curl, &header);
/* The extra 1 byte is probably for '\0' */
if (recv - 1 == (long int) req_size) {
@ -974,7 +984,6 @@ range requests\n");
}
memmove(output_buf, ts.data, recv);
curl_easy_cleanup(curl);
FREE(ts.data);
return recv;

View File

@ -360,9 +360,8 @@ void transfer_nonblocking(CURL *curl)
}
}
size_t
write_memory_callback(void *contents, size_t size, size_t nmemb,
void *userp)
size_t write_memory_callback(void *contents, size_t size, size_t nmemb,
void *userp)
{
size_t realsize = size * nmemb;
TransferStruct *mem = (TransferStruct *) userp;

View File

@ -323,8 +323,7 @@ XML_parser_general(void *data, const char *elem, const char **attr)
* \brief parse a XML string in order to fill in the LinkTable
*/
static LinkTable *sonic_url_to_LinkTable(const char *url,
XML_StartElementHandler handler,
int depth)
XML_StartElementHandler handler, int depth)
{
LinkTable *linktbl = LinkTable_alloc(url);
linktbl->links[0]->sonic.depth = depth;