summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Reisner <dreisner@archlinux.org>2011-08-18 14:17:30 -0400
committerDan McGee <dan@archlinux.org>2011-08-19 09:43:19 -0500
commit24824b54ce6ce3f62417be493d1e29eeb2cc8f53 (patch)
tree78741e41a4a54a786b4d4e9769160647613f6e9d
parent2ca27ab3a14c106a7153dda337a61c79db7a6de0 (diff)
dload: add 'unlink_on_fail' to payload struct
Let callers of _alpm_download state whether we should delete on fail, rather than inferring it from context. We still override this decision and always unlink when a temp file is used. Signed-off-by: Dave Reisner <dreisner@archlinux.org> Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r--lib/libalpm/be_sync.c1
-rw-r--r--lib/libalpm/dload.c8
-rw-r--r--lib/libalpm/dload.h1
3 files changed, 5 insertions, 5 deletions
diff --git a/lib/libalpm/be_sync.c b/lib/libalpm/be_sync.c
index 2db7ce58..75f06645 100644
--- a/lib/libalpm/be_sync.c
+++ b/lib/libalpm/be_sync.c
@@ -197,6 +197,7 @@ int SYMEXPORT alpm_db_update(int force, alpm_db_t *db)
snprintf(payload->fileurl, len, "%s/%s.db", server, db->treename);
payload->handle = handle;
payload->force = force;
+ payload->unlink_on_fail = 1;
ret = _alpm_download(payload, syncpath, NULL);
diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c
index 37989370..2a1fb41c 100644
--- a/lib/libalpm/dload.c
+++ b/lib/libalpm/dload.c
@@ -180,7 +180,7 @@ static size_t parse_headers(void *ptr, size_t size, size_t nmemb, void *user)
static int curl_download_internal(struct dload_payload *payload,
const char *localpath, char **final_file)
{
- int ret = -1, should_unlink = !payload->allow_resume;
+ int ret = -1;
FILE *localf = NULL;
const char *useragent;
const char *open_mode = "wb";
@@ -217,7 +217,7 @@ static int curl_download_internal(struct dload_payload *payload,
/* we can't support resuming this kind of download, so a partial transfer
* will be destroyed */
- should_unlink = 1;
+ payload->unlink_on_fail = 1;
/* create a random filename, which is opened with O_EXCL */
snprintf(randpath, PATH_MAX, "%salpmtmp.XXXXXX", localpath);
@@ -312,8 +312,6 @@ static int curl_download_internal(struct dload_payload *payload,
break;
case CURLE_ABORTED_BY_CALLBACK:
goto cleanup;
- case CURLE_OPERATION_TIMEDOUT:
- /* fallthrough */
default:
if(!payload->errors_ok) {
handle->pm_errno = ALPM_ERR_LIBCURL;
@@ -396,7 +394,7 @@ cleanup:
}
}
- if((ret == -1 || dload_interrupted) && should_unlink && tempfile) {
+ if((ret == -1 || dload_interrupted) && payload->unlink_on_fail && tempfile) {
unlink(tempfile);
}
diff --git a/lib/libalpm/dload.h b/lib/libalpm/dload.h
index 341a4a1a..0c5fcb25 100644
--- a/lib/libalpm/dload.h
+++ b/lib/libalpm/dload.h
@@ -35,6 +35,7 @@ struct dload_payload {
int force;
int allow_resume;
int errors_ok;
+ int unlink_on_fail;
};
void _alpm_dload_payload_free(struct dload_payload *payload);