[pacman-dev] [PATCH 4/5] sync: check for necessary disk space for download
Dan McGee
dpmcgee at gmail.com
Sun Oct 16 15:40:19 EDT 2011
On Sun, Oct 16, 2011 at 1:59 PM, Dave Reisner <d at falconindy.com> wrote:
> Signed-off-by: Dave Reisner <dreisner at archlinux.org>
> ---
> lib/libalpm/sync.c | 28 ++++++++++++++++++++++++++++
> 1 files changed, 28 insertions(+), 0 deletions(-)
>
> diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c
> index cac4c8f..3c304a3 100644
> --- a/lib/libalpm/sync.c
> +++ b/lib/libalpm/sync.c
> @@ -872,6 +872,31 @@ static int download_files(alpm_handle_t *handle, alpm_list_t **deltas)
> }
>
> if(files) {
> + /* check for necessary disk space for download */
> + if(handle->checkspace) {
> + off_t *file_sizes;
> + size_t num_files;
> + int idx, ret;
> +
> + _alpm_log(handle, ALPM_LOG_DEBUG, "checking available disk space for download\n");
> +
> + num_files = alpm_list_count(files);
> + CALLOC(file_sizes, num_files, sizeof(off_t), goto finish);
> +
> + for(i = files, idx = 0; i; i = i->next, idx++) {
idx should be a size_t too.
> + const struct dload_payload *payload = i->data;
> + file_sizes[idx] = payload->max_size;
> + }
> +
> + ret = _alpm_check_downloadspace(handle, cachedir, num_files, file_sizes);
> + free(file_sizes);
> +
> + if(ret != 0) {
> + errors++;
> + goto finish;
> + }
> + }
> +
> EVENT(handle, ALPM_EVENT_RETRIEVE_START, NULL, NULL);
> for(i = files; i; i = i->next) {
> struct dload_payload *payload = i->data;
> @@ -899,7 +924,10 @@ static int download_files(alpm_handle_t *handle, alpm_list_t **deltas)
> _alpm_log(handle, ALPM_LOG_WARNING, _("failed to retrieve some files\n"));
> }
> }
> + }
>
> +finish:
> + if(files) {
> alpm_list_free_inner(files, (alpm_list_fn_free)_alpm_dload_payload_reset);
> FREELIST(files);
> }
> --
> 1.7.7
>
>
>
More information about the pacman-dev
mailing list