From d87dd153fc032d32b15fe9abd4a11657e79d0c07 Mon Sep 17 00:00:00 2001 From: morganamilo Date: Fri, 23 May 2025 19:36:44 +0100 Subject: [PATCH] libalpm: finalize tempfile if destfile doesn't exist On setup we move the termfile into the temp download dir to resume downloads. We don't move these back losing any tempfiles we already had. --- lib/libalpm/dload.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c index 424be680..309c5d75 100644 --- a/lib/libalpm/dload.c +++ b/lib/libalpm/dload.c @@ -1102,17 +1102,24 @@ static int finalize_download_locations(alpm_list_t *payloads, const char *localp ASSERT(payloads != NULL, return -1); ASSERT(localpath != NULL, return -1); alpm_list_t *p; + struct stat st; int returnvalue = 0; for(p = payloads; p; p = p->next) { struct dload_payload *payload = p->data; - const char *filename; + const char *filename = NULL; - if(payload->destfile_name) { + if(payload->destfile_name && stat(payload->destfile_name, &st) == 0) { filename = payload->destfile_name; - } else { + } else if(stat(payload->tempfile_name, &st) == 0) { filename = payload->tempfile_name; } + /* if neither file exists then the download failed and logged an error for us */ + if(!filename) { + returnvalue = -1; + continue; + } + int ret = move_file(filename, localpath); if(ret == -1) {