diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libalpm/dload.c | 6 | ||||
-rw-r--r-- | lib/libalpm/sync.c | 14 |
2 files changed, 18 insertions, 2 deletions
diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c index ddcc45f6..40a1d07d 100644 --- a/lib/libalpm/dload.c +++ b/lib/libalpm/dload.c @@ -414,6 +414,12 @@ static int curl_download_internal(struct dload_payload *payload, curl_set_handle_opts(payload, curl, error_buffer); + if(payload->max_size == payload->initial_size) { + /* .part file is complete */ + ret = 0; + goto cleanup; + } + if(localf == NULL) { localf = fopen(payload->tempfile_name, payload->tempfile_openmode); if(localf == NULL) { diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c index 70c37890..97a351fe 100644 --- a/lib/libalpm/sync.c +++ b/lib/libalpm/sync.c @@ -731,6 +731,8 @@ static int find_dl_candidates(alpm_db_t *repo, alpm_list_t **files) alpm_pkg_t *spkg = i->data; if(spkg->origin != ALPM_PKG_FROM_FILE && repo == spkg->origin_data.db) { + char *fpath = NULL; + if(!repo->servers) { handle->pm_errno = ALPM_ERR_SERVER_NONE; _alpm_log(handle, ALPM_LOG_ERROR, "%s: %s\n", @@ -738,13 +740,21 @@ static int find_dl_candidates(alpm_db_t *repo, alpm_list_t **files) return 1; } - if(spkg->download_size != 0) { + ASSERT(spkg->filename != NULL, RET_ERR(handle, ALPM_ERR_PKG_INVALID_NAME, -1)); + + if(spkg->download_size == 0) { + /* check for file in cache - allows us to handle complete .part files */ + fpath = _alpm_filecache_find(handle, spkg->filename); + } + + if(spkg->download_size != 0 || !fpath) { struct dload_payload *payload; - ASSERT(spkg->filename != NULL, RET_ERR(handle, ALPM_ERR_PKG_INVALID_NAME, -1)); payload = build_payload(handle, spkg->filename, spkg->size, repo->servers); ASSERT(payload, return -1); *files = alpm_list_add(*files, payload); } + + FREE(fpath); } } |