index : pacman | |
Archlinux32 fork of pacman | gitolite user |
summaryrefslogtreecommitdiff |
author | Xavier Chantry <shiningxc@gmail.com> | 2008-11-15 10:10:56 +0100 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2009-01-12 22:40:15 -0600 |
commit | 8017b0bb8ec5364f8a3999caffc6b3c3ea991810 (patch) | |
tree | a3218faf2cd68eb82b39d8fb3a8f5325fbcdead2 /lib | |
parent | 4ec846f5ac79497483c90eb52ced30164d9c0c1e (diff) |
-rw-r--r-- | lib/libalpm/dload.c | 37 | ||||
-rw-r--r-- | lib/libalpm/error.c | 5 |
diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c index 06f643f7..5b0a691f 100644 --- a/lib/libalpm/dload.c +++ b/lib/libalpm/dload.c @@ -34,15 +34,7 @@ #include <sys/param.h> /* MAXHOSTNAMELEN */ #endif -#if defined(HAVE_LIBDOWNLOAD) -#include <download.h> -#define fetchFreeURL downloadFreeURL -#define fetchLastErrCode downloadLastErrCode -#define fetchLastErrString downloadLastErrString -#define fetchParseURL downloadParseURL -#define fetchTimeout downloadTimeout -#define fetchXGet downloadXGet -#elif defined(HAVE_LIBFETCH) +#if defined(INTERNAL_DOWNLOAD) #include <fetch.h> #endif @@ -109,7 +101,8 @@ static struct url *url_for_string(const char *url) static int download_internal(const char *url, const char *localpath, time_t mtimeold, time_t *mtimenew) { - FILE *dlf, *localf = NULL; + fetchIO *dlf = NULL; + FILE *localf = NULL; struct url_stat ust; struct stat st; int chk_resume = 0, ret = 0; @@ -214,16 +207,8 @@ static int download_internal(const char *url, const char *localpath, handle->dlcb(filename, 0, ust.size); } - while((nread = fread(buffer, 1, PM_DLBUF_LEN, dlf)) > 0) { + while((nread = fetchIO_read(dlf, buffer, PM_DLBUF_LEN)) > 0) { size_t nwritten = 0; - if(ferror(dlf)) { - pm_errno = PM_ERR_LIBFETCH; - _alpm_log(PM_LOG_ERROR, _("error downloading '%s': %s\n"), - filename, fetchLastErrString); - ret = -1; - goto cleanup; - } - while(nwritten < nread) { nwritten += fwrite(buffer, 1, (nread - nwritten), localf); if(ferror(localf)) { @@ -239,12 +224,22 @@ static int download_internal(const char *url, const char *localpath, handle->dlcb(filename, dl_thisfile, ust.size); } } + + /* did the transfer complete normally? */ + if (ust.size != -1 && dl_thisfile < ust.size) { + pm_errno = PM_ERR_LIBFETCH; + _alpm_log(PM_LOG_ERROR, _("%s appears to be truncated: %jd/%jd bytes\n"), + filename, (intmax_t)dl_thisfile, (intmax_t)ust.size); + ret = -1; + goto cleanup; + } + /* probably safer to close the file descriptors now before renaming the file, * for example to make sure the buffers are flushed. */ fclose(localf); localf = NULL; - fclose(dlf); + fetchIO_close(dlf); dlf = NULL; rename(tempfile, destfile); @@ -260,7 +255,7 @@ cleanup: fclose(localf); } if(dlf != NULL) { - fclose(dlf); + fetchIO_close(dlf); } fetchFreeURL(fileurl); return(ret); diff --git a/lib/libalpm/error.c b/lib/libalpm/error.c index 80a4fb1a..df93cb7d 100644 --- a/lib/libalpm/error.c +++ b/lib/libalpm/error.c @@ -30,10 +30,7 @@ #include <sys/param.h> /* MAXHOSTNAMELEN */ #endif -#if defined(HAVE_LIBDOWNLOAD) -#include <download.h> /* downloadLastErrString */ -#define fetchLastErrString downloadLastErrString -#elif defined(HAVE_LIBFETCH) +#if defined(INTERNAL_DOWNLOAD) #include <fetch.h> /* fetchLastErrString */ #endif |