From 5853025137e64411d7be745a55936ec3e8868212 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Mon, 24 Oct 2011 13:49:14 -0500 Subject: Add more logging to download code This adds a logger to the CURLE_OK case so we can always know the return code if it was >= 400, and debug log it regardless. Also adjust another logger to use the cURL error message directly, as well as use fstat() when we have an open file handle rather than stat(). Signed-off-by: Dan McGee --- lib/libalpm/dload.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'lib/libalpm') diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c index cd2857c3..9d919b0a 100644 --- a/lib/libalpm/dload.c +++ b/lib/libalpm/dload.c @@ -392,8 +392,15 @@ static int curl_download_internal(struct dload_payload *payload, case CURLE_OK: /* get http/ftp response code */ curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &respcode); + _alpm_log(handle, ALPM_LOG_DEBUG, "response code: %ld\n", respcode); if(respcode >= 400) { payload->unlink_on_fail = 1; + /* non-translated message is same as libcurl */ + snprintf(error_buffer, sizeof(error_buffer), + "The requested URL returned error: %ld", respcode); + _alpm_log(handle, ALPM_LOG_ERROR, + _("failed retrieving file '%s' from %s : %s\n"), + payload->remote_name, hostname, error_buffer); goto cleanup; } break; @@ -402,15 +409,16 @@ static int curl_download_internal(struct dload_payload *payload, if(dload_interrupted == ABORT_OVER_MAXFILESIZE) { payload->curlerr = CURLE_FILESIZE_EXCEEDED; handle->pm_errno = ALPM_ERR_LIBCURL; - /* the hardcoded 'size exceeded' message is same as libcurl's normal */ + /* use the 'size exceeded' message from libcurl */ _alpm_log(handle, ALPM_LOG_ERROR, _("failed retrieving file '%s' from %s : %s\n"), - payload->remote_name, hostname, "Maximum file size exceeded"); + payload->remote_name, hostname, + curl_easy_strerror(CURLE_FILESIZE_EXCEEDED)); } goto cleanup; default: /* delete zero length downloads */ - if(stat(payload->tempfile_name, &st) == 0 && st.st_size == 0) { + if(fstat(fileno(localf), &st) == 0 && st.st_size == 0) { payload->unlink_on_fail = 1; } if(!payload->errors_ok) { -- cgit v1.2.3-70-g09d2 From 2da59e1aa91fa4160ec1c8ec84d94d8141b2a832 Mon Sep 17 00:00:00 2001 From: Dave Reisner Date: Tue, 18 Oct 2011 10:46:47 -0400 Subject: lib/sync: inform callers of compute_download_size of a partial Extend the return values of compute_download_size to allow callers to know that a .part file exists for the package. This extra value isn't currently used, but it'll be needed later on. Signed-off-by: Dave Reisner Signed-off-by: Dan McGee --- lib/libalpm/sync.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'lib/libalpm') diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c index 08d634d6..54b9794a 100644 --- a/lib/libalpm/sync.c +++ b/lib/libalpm/sync.c @@ -288,6 +288,7 @@ static int compute_download_size(alpm_pkg_t *newpkg) char *fpath, *fnamepart = NULL; off_t size = 0; alpm_handle_t *handle = newpkg->handle; + int ret = 0; if(newpkg->origin != PKG_FROM_SYNCDB) { newpkg->infolevel |= INFRQ_DSIZE; @@ -316,6 +317,9 @@ static int compute_download_size(alpm_pkg_t *newpkg) size = newpkg->size - st.st_size; size = size < 0 ? 0 : size; } + + /* tell the caller that we have a partial */ + ret = 1; } else if(handle->usedelta) { off_t dltsize; @@ -345,7 +349,7 @@ finish: FREE(fpath); FREE(fnamepart); - return 0; + return ret; } int _alpm_sync_prepare(alpm_handle_t *handle, alpm_list_t **data) @@ -606,7 +610,7 @@ int _alpm_sync_prepare(alpm_handle_t *handle, alpm_list_t **data) for(i = trans->add; i; i = i->next) { /* update download size field */ alpm_pkg_t *spkg = i->data; - if(compute_download_size(spkg) != 0) { + if(compute_download_size(spkg) < 0) { ret = -1; goto cleanup; } -- cgit v1.2.3-70-g09d2