[pacman-dev] [PATCH] lib/dload: avoid deleting .part file on too-slow xfer

Dave Reisner d at falconindy.com
Sat Aug 13 16:07:03 EDT 2011


Take this opportunity to refactor the if/then/else logic into a
switch/case which is likely going to be needed to fine tune more
exceptions in the future.

Fixes FS#25531

Signed-off-by: Dave Reisner <dreisner at archlinux.org>
---
 lib/libalpm/dload.c |   34 +++++++++++++++++++++-------------
 1 files changed, 21 insertions(+), 13 deletions(-)

diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c
index 6709084..5a63e48 100644
--- a/lib/libalpm/dload.c
+++ b/lib/libalpm/dload.c
@@ -306,19 +306,27 @@ static int curl_download_internal(struct dload_payload *payload,
 	curl_easy_setopt(handle->curl, CURLOPT_NOPROGRESS, 1L);
 
 	/* was it a success? */
-	if(handle->curlerr == CURLE_ABORTED_BY_CALLBACK) {
-		goto cleanup;
-	} else if(handle->curlerr != CURLE_OK) {
-		if(!payload->errors_ok) {
-			handle->pm_errno = ALPM_ERR_LIBCURL;
-			_alpm_log(handle, ALPM_LOG_ERROR, _("failed retrieving file '%s' from %s : %s\n"),
-					payload->filename, hostname, error_buffer);
-		} else {
-			_alpm_log(handle, ALPM_LOG_DEBUG, "failed retrieving file '%s' from %s : %s\n",
-					payload->filename, hostname, error_buffer);
-		}
-		unlink(tempfile);
-		goto cleanup;
+	switch(handle->curlerr) {
+		case CURLE_OK:
+			break;
+		case CURLE_ABORTED_BY_CALLBACK:
+			goto cleanup;
+		case CURLE_OPERATION_TIMEDOUT:
+			dload_interrupted = 1;
+			/* fallthrough */
+		default:
+			if(!payload->errors_ok) {
+				handle->pm_errno = ALPM_ERR_LIBCURL;
+				_alpm_log(handle, ALPM_LOG_ERROR, _("failed retrieving file '%s' from %s : %s\n"),
+						payload->filename, hostname, error_buffer);
+				if(!dload_interrupted) {
+					unlink(tempfile);
+				}
+			} else {
+				_alpm_log(handle, ALPM_LOG_DEBUG, "failed retrieving file '%s' from %s : %s\n",
+						payload->filename, hostname, error_buffer);
+			}
+			goto cleanup;
 	}
 
 	/* retrieve info about the state of the transfer */
-- 
1.7.6



More information about the pacman-dev mailing list