Implement _alpm_multi_download
It is an equivalent of _alpm_download but accepts a list of payloads. curl_multi_download_internal() is a stub at this moment and will be implemented in the later commits of this patch series. Signed-off-by: Anatol Pomozov <anatol.pomozov@gmail.com> Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
parent
fa68c33fa8
commit
1d42a8f954
1 changed files with 46 additions and 4 deletions
|
@ -598,6 +598,16 @@ cleanup:
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int curl_multi_download_internal(alpm_handle_t *handle,
|
||||||
|
alpm_list_t *payloads /* struct dload_payload */,
|
||||||
|
const char *localpath)
|
||||||
|
{
|
||||||
|
(void)handle;
|
||||||
|
(void)payloads;
|
||||||
|
(void)localpath;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/** Download a file given by a URL to a local directory.
|
/** Download a file given by a URL to a local directory.
|
||||||
|
@ -634,10 +644,42 @@ int _alpm_multi_download(alpm_handle_t *handle,
|
||||||
alpm_list_t *payloads /* struct dload_payload */,
|
alpm_list_t *payloads /* struct dload_payload */,
|
||||||
const char *localpath)
|
const char *localpath)
|
||||||
{
|
{
|
||||||
(void)handle;
|
if(handle->fetchcb == NULL) {
|
||||||
(void)payloads;
|
#ifdef HAVE_LIBCURL
|
||||||
(void)localpath;
|
return curl_multi_download_internal(handle, payloads, localpath);
|
||||||
|
#else
|
||||||
|
RET_ERR(handle, ALPM_ERR_EXTERNAL_DOWNLOAD, -1);
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
alpm_list_t *p;
|
||||||
|
for(p = payloads; p; p = p->next) {
|
||||||
|
struct dload_payload *payload = p->data;
|
||||||
|
alpm_list_t *s;
|
||||||
|
int success = 0;
|
||||||
|
|
||||||
|
for(s = payload->servers; s; s = s->next) {
|
||||||
|
const char *server = s->data;
|
||||||
|
char *fileurl;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
size_t len = strlen(server) + strlen(payload->filepath) + 2;
|
||||||
|
MALLOC(fileurl, len, RET_ERR(handle, ALPM_ERR_MEMORY, -1));
|
||||||
|
snprintf(fileurl, len, "%s/%s", server, payload->filepath);
|
||||||
|
|
||||||
|
ret = handle->fetchcb(fileurl, localpath, payload->force);
|
||||||
|
free(fileurl);
|
||||||
|
|
||||||
|
if (ret != -1) {
|
||||||
|
success = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!success && !payload->errors_ok) {
|
||||||
|
RET_ERR(handle, ALPM_ERR_EXTERNAL_DOWNLOAD, -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *filecache_find_url(alpm_handle_t *handle, const char *url)
|
static char *filecache_find_url(alpm_handle_t *handle, const char *url)
|
||||||
|
|
Loading…
Add table
Reference in a new issue