diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/libalpm/dload.c | 14 | ||||
| -rw-r--r-- | lib/libalpm/sync.c | 8 | 
2 files changed, 17 insertions, 5 deletions
diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c index cd2857c3..9d919b0a 100644 --- a/lib/libalpm/dload.c +++ b/lib/libalpm/dload.c @@ -392,8 +392,15 @@ static int curl_download_internal(struct dload_payload *payload,  		case CURLE_OK:  			/* get http/ftp response code */  			curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &respcode); +			_alpm_log(handle, ALPM_LOG_DEBUG, "response code: %ld\n", respcode);  			if(respcode >= 400) {  				payload->unlink_on_fail = 1; +				/* non-translated message is same as libcurl */ +				snprintf(error_buffer, sizeof(error_buffer), +						"The requested URL returned error: %ld", respcode); +				_alpm_log(handle, ALPM_LOG_ERROR, +						_("failed retrieving file '%s' from %s : %s\n"), +						payload->remote_name, hostname, error_buffer);  				goto cleanup;  			}  			break; @@ -402,15 +409,16 @@ static int curl_download_internal(struct dload_payload *payload,  			if(dload_interrupted == ABORT_OVER_MAXFILESIZE) {  				payload->curlerr = CURLE_FILESIZE_EXCEEDED;  				handle->pm_errno = ALPM_ERR_LIBCURL; -				/* the hardcoded 'size exceeded' message is same as libcurl's normal */ +				/* use the 'size exceeded' message from libcurl */  				_alpm_log(handle, ALPM_LOG_ERROR,  						_("failed retrieving file '%s' from %s : %s\n"), -						payload->remote_name, hostname, "Maximum file size exceeded"); +						payload->remote_name, hostname, +						curl_easy_strerror(CURLE_FILESIZE_EXCEEDED));  			}  			goto cleanup;  		default:  			/* delete zero length downloads */ -			if(stat(payload->tempfile_name, &st) == 0 && st.st_size == 0) { +			if(fstat(fileno(localf), &st) == 0 && st.st_size == 0) {  				payload->unlink_on_fail = 1;  			}  			if(!payload->errors_ok) { diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c index 78f7da9a..52049a8c 100644 --- a/lib/libalpm/sync.c +++ b/lib/libalpm/sync.c @@ -288,6 +288,7 @@ static int compute_download_size(alpm_pkg_t *newpkg)  	char *fpath, *fnamepart = NULL;  	off_t size = 0;  	alpm_handle_t *handle = newpkg->handle; +	int ret = 0;  	if(newpkg->origin != PKG_FROM_SYNCDB) {  		newpkg->infolevel |= INFRQ_DSIZE; @@ -316,6 +317,9 @@ static int compute_download_size(alpm_pkg_t *newpkg)  			size = newpkg->size - st.st_size;  			size = size < 0 ? 0 : size;  		} + +		/* tell the caller that we have a partial */ +		ret = 1;  	} else if(handle->usedelta) {  		off_t dltsize; @@ -345,7 +349,7 @@ finish:  	FREE(fpath);  	FREE(fnamepart); -	return 0; +	return ret;  }  int _alpm_sync_prepare(alpm_handle_t *handle, alpm_list_t **data) @@ -606,7 +610,7 @@ int _alpm_sync_prepare(alpm_handle_t *handle, alpm_list_t **data)  	for(i = trans->add; i; i = i->next) {  		/* update download size field */  		alpm_pkg_t *spkg = i->data; -		if(compute_download_size(spkg) != 0) { +		if(compute_download_size(spkg) < 0) {  			ret = -1;  			goto cleanup;  		}  | 
