summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/libalpm/dload.c6
-rw-r--r--lib/libalpm/sync.c14
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);
}
}