summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/libalpm/dload.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c
index 2a1fb41c..e181f425 100644
--- a/lib/libalpm/dload.c
+++ b/lib/libalpm/dload.c
@@ -189,7 +189,7 @@ static int curl_download_internal(struct dload_payload *payload,
char hostname[256];
char error_buffer[CURL_ERROR_SIZE];
struct stat st;
- long timecond, remote_time = -1;
+ long timecond, respcode = 0, remote_time = -1;
double remote_size, bytes_dl;
struct sigaction sig_pipe[2], sig_int[2];
/* shortcut to our handle within the payload */
@@ -309,6 +309,12 @@ static int curl_download_internal(struct dload_payload *payload,
/* was it a success? */
switch(handle->curlerr) {
case CURLE_OK:
+ /* get http/ftp response code */
+ curl_easy_getinfo(handle->curl, CURLINFO_RESPONSE_CODE, &respcode);
+ if(respcode >=400) {
+ payload->unlink_on_fail = 1;
+ goto cleanup;
+ }
break;
case CURLE_ABORTED_BY_CALLBACK:
goto cleanup;