[pacman-dev] [PATCH 5/5] sync: move file download loop out of download_files
Dan McGee
dpmcgee at gmail.com
Sun Oct 16 15:41:53 EDT 2011
On Sun, Oct 16, 2011 at 1:59 PM, Dave Reisner <d at falconindy.com> wrote:
> Create a new static function called 'download_single_file' which
> iterates over the servers for each payload.
>
> Signed-off-by: Dave Reisner <dreisner at archlinux.org>
Signed-off-by: Dan McGee <dan at archlinux.org>
> ---
> More code movement -- mostly just to improve readability and keep the function
> size down to something reasonable.
>
> lib/libalpm/sync.c | 46 +++++++++++++++++++++++++---------------------
> 1 files changed, 25 insertions(+), 21 deletions(-)
>
> diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c
> index 3c304a3..d62950c 100644
> --- a/lib/libalpm/sync.c
> +++ b/lib/libalpm/sync.c
> @@ -844,6 +844,30 @@ static int find_dl_candidates(alpm_db_t *repo, alpm_list_t **files, alpm_list_t
> return 0;
> }
>
> +static int download_single_file(alpm_handle_t *handle, struct dload_payload *payload,
> + const char *cachedir)
> +{
> + const alpm_list_t *server;
> +
> + for(server = payload->servers; server; server = server->next) {
> + const char *server_url = server->data;
> + size_t len;
> +
> + /* print server + filename into a buffer */
> + len = strlen(server_url) + strlen(payload->remote_name) + 2;
> + MALLOC(payload->fileurl, len, RET_ERR(handle, ALPM_ERR_MEMORY, -1));
> + snprintf(payload->fileurl, len, "%s/%s", server_url, payload->remote_name);
> + payload->handle = handle;
> + payload->allow_resume = 1;
> +
> + if(_alpm_download(payload, cachedir, NULL) != -1) {
> + return 0;
> + }
> + }
> +
> + return -1;
> +}
> +
> static int download_files(alpm_handle_t *handle, alpm_list_t **deltas)
> {
> const char *cachedir;
> @@ -899,27 +923,7 @@ static int download_files(alpm_handle_t *handle, alpm_list_t **deltas)
>
> EVENT(handle, ALPM_EVENT_RETRIEVE_START, NULL, NULL);
> for(i = files; i; i = i->next) {
> - struct dload_payload *payload = i->data;
> - const alpm_list_t *server;
> - int ret = -1;
> -
> - for(server = payload->servers; server; server = server->next) {
> - const char *server_url = server->data;
> - size_t len;
> -
> - /* print server + filename into a buffer */
> - len = strlen(server_url) + strlen(payload->remote_name) + 2;
> - MALLOC(payload->fileurl, len, RET_ERR(handle, ALPM_ERR_MEMORY, -1));
> - snprintf(payload->fileurl, len, "%s/%s", server_url, payload->remote_name);
> - payload->handle = handle;
> - payload->allow_resume = 1;
> -
> - ret = _alpm_download(payload, cachedir, NULL);
> - if(ret != -1) {
> - break;
> - }
> - }
> - if(ret == -1) {
> + if(download_single_file(handle, i->data, cachedir) == -1) {
> errors++;
> _alpm_log(handle, ALPM_LOG_WARNING, _("failed to retrieve some files\n"));
> }
> --
> 1.7.7
>
>
>
More information about the pacman-dev
mailing list