From 0669c9bfac7aead01f1400444e691d542f7645c2 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Sun, 1 Jun 2008 21:47:31 -0500 Subject: Use correct C type for file sizes We have been using unsigned long as a file size type for a while, which works but isn't quite correct and could easily break. Worse was probably our use of int in the download callback functions, which could be restrictive for packages > 2GB in size. Switch all file size variables to use off_t, which is the preferred type for file sizes. Note that at least on Linux, all applications compiled against libalpm must now be sure to use large file support, where _FILE_OFFSET_BITS is defined to be 64 or there will be some weird issues that crop up. Signed-off-by: Dan McGee --- src/pacman/callback.c | 9 +++++---- src/pacman/callback.h | 4 +++- src/pacman/util.c | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/pacman/callback.c b/src/pacman/callback.c index 4c415e1a..1942aefd 100644 --- a/src/pacman/callback.c +++ b/src/pacman/callback.c @@ -23,6 +23,7 @@ #include #include #include +#include /* off_t */ #include #include #include @@ -36,7 +37,7 @@ /* download progress bar */ static float rate_last; -static int xfered_last; +static off_t xfered_last; static struct timeval initial_time; /* transaction progress bar */ @@ -410,7 +411,7 @@ void cb_trans_progress(pmtransprog_t event, const char *pkgname, int percent, } /* callback to handle display of download progress */ -void cb_dl_progress(const char *filename, int xfered, int total) +void cb_dl_progress(const char *filename, off_t xfered, off_t total) { const int infolen = 50; const int filenamelen = infolen - 27; @@ -428,12 +429,12 @@ void cb_dl_progress(const char *filename, int xfered, int total) return; } - /* this is basically a switch on file_xferred: 0, file_total, and + /* this is basically a switch on xfered: 0, total, and * anything else */ if(xfered == 0) { /* set default starting values */ gettimeofday(&initial_time, NULL); - xfered_last = 0; + xfered_last = (off_t)0; rate_last = 0.0; timediff = get_update_timediff(1); } else if(xfered == total) { diff --git a/src/pacman/callback.h b/src/pacman/callback.h index 39d59d8b..28d396e8 100644 --- a/src/pacman/callback.h +++ b/src/pacman/callback.h @@ -19,6 +19,8 @@ #ifndef _PM_CALLBACK_H #define _PM_CALLBACK_H +#include /* off_t */ + #include /* callback to handle messages/notifications from libalpm transactions */ @@ -33,7 +35,7 @@ void cb_trans_progress(pmtransprog_t event, const char *pkgname, int percent, int howmany, int remain); /* callback to handle display of download progress */ -void cb_dl_progress(const char *filename, int file_xfered, int file_total); +void cb_dl_progress(const char *filename, off_t file_xfered, off_t file_total); /* callback to handle messages/notifications from pacman library */ void cb_log(pmloglevel_t level, char *fmt, va_list args); diff --git a/src/pacman/util.c b/src/pacman/util.c index 2e4ee86e..e702886b 100644 --- a/src/pacman/util.c +++ b/src/pacman/util.c @@ -493,7 +493,7 @@ void display_targets(const alpm_list_t *syncpkgs, pmdb_t *db_local) const alpm_list_t *i, *j; alpm_list_t *targets = NULL, *to_remove = NULL; /* TODO these are some messy variable names */ - unsigned long isize = 0, rsize = 0, dispsize = 0, dlsize = 0; + off_t isize = 0, rsize = 0, dispsize = 0, dlsize = 0; double mbisize = 0.0, mbrsize = 0.0, mbdispsize = 0.0, mbdlsize = 0.0; for(i = syncpkgs; i; i = alpm_list_next(i)) { -- cgit v1.2.3-54-g00ecf