All of these can be done with integer division; the only slightly
interesting part is ensuring we round up like before with calling the
ceil() function.

Signed-off-by: Dan McGee <[email protected]>
---
 lib/libalpm/add.c       |   14 +++++++-------
 lib/libalpm/conflict.c  |    4 ++--
 lib/libalpm/diskspace.c |   18 ++++++++++--------
 lib/libalpm/remove.c    |    7 +++----
 4 files changed, 22 insertions(+), 21 deletions(-)

diff --git a/lib/libalpm/add.c b/lib/libalpm/add.c
index 2f341eb..477c8f5 100644
--- a/lib/libalpm/add.c
+++ b/lib/libalpm/add.c
@@ -477,8 +477,8 @@ static int extract_single_file(struct archive *archive,
        return(errors);
 }
 
-static int commit_single_pkg(pmpkg_t *newpkg, size_t pkg_current, size_t 
pkg_count,
-               pmtrans_t *trans, pmdb_t *db)
+static int commit_single_pkg(pmpkg_t *newpkg, size_t pkg_current,
+               size_t pkg_count, pmtrans_t *trans, pmdb_t *db)
 {
        int i, ret = 0, errors = 0;
        char scriptlet[PATH_MAX+1];
@@ -605,14 +605,14 @@ static int commit_single_pkg(pmpkg_t *newpkg, size_t 
pkg_current, size_t pkg_cou
                }
 
                for(i = 0; archive_read_next_header(archive, &entry) == 
ARCHIVE_OK; i++) {
-                       double percent;
+                       int percent;
 
                        if(newpkg->size != 0) {
                                /* Using compressed size for calculations here, 
as newpkg->isize is not
                                 * exact when it comes to comparing to the 
ACTUAL uncompressed size
                                 * (missing metadata sizes) */
                                int64_t pos = 
archive_position_compressed(archive);
-                               percent = (double)pos / (double)newpkg->size;
+                               percent = (pos * 100) / newpkg->size;
                                _alpm_log(PM_LOG_DEBUG, "decompression 
progress: "
                                                "%f%% (%"PRId64" / %jd)\n",
                                                percent*100.0, pos, 
(intmax_t)newpkg->size);
@@ -620,16 +620,16 @@ static int commit_single_pkg(pmpkg_t *newpkg, size_t 
pkg_current, size_t pkg_cou
                                        percent = 1.0;
                                }
                        } else {
-                               percent = 0.0;
+                               percent = 0;
                        }
 
                        if(is_upgrade) {
                                PROGRESS(trans, PM_TRANS_PROGRESS_UPGRADE_START,
-                                               alpm_pkg_get_name(newpkg), 
(int)(percent * 100), pkg_count,
+                                               alpm_pkg_get_name(newpkg), 
percent, pkg_count,
                                                pkg_current);
                        } else {
                                PROGRESS(trans, PM_TRANS_PROGRESS_ADD_START,
-                                               alpm_pkg_get_name(newpkg), 
(int)(percent * 100), pkg_count,
+                                               alpm_pkg_get_name(newpkg), 
percent, pkg_count,
                                                pkg_current);
                        }
 
diff --git a/lib/libalpm/conflict.c b/lib/libalpm/conflict.c
index 0eaf437..fc25e7d 100644
--- a/lib/libalpm/conflict.c
+++ b/lib/libalpm/conflict.c
@@ -425,8 +425,8 @@ alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t *db, 
pmtrans_t *trans,
                        continue;
                }
 
-               double percent = (double)current / (double)numtargs;
-               PROGRESS(trans, PM_TRANS_PROGRESS_CONFLICTS_START, "", 
(int)(percent * 100),
+               int percent = (current * 100) / numtargs;
+               PROGRESS(trans, PM_TRANS_PROGRESS_CONFLICTS_START, "", percent,
                         numtargs, current);
                /* CHECK 1: check every target against every target */
                _alpm_log(PM_LOG_DEBUG, "searching for file conflicts: %s\n",
diff --git a/lib/libalpm/diskspace.c b/lib/libalpm/diskspace.c
index 87dca84..d0f6c64 100644
--- a/lib/libalpm/diskspace.c
+++ b/lib/libalpm/diskspace.c
@@ -178,8 +178,9 @@ static int calculate_removed_size(const alpm_list_t 
*mount_points,
                }
 
                data = mp->data;
-               data->blocks_needed -= (long)ceil((double)(st.st_size) /
-                                           (double)(data->fsp.f_bsize));
+               /* the addition of (divisor - 1) performs ceil() with integer 
division */
+               data->blocks_needed -=
+                       (st.st_size + data->fsp.f_bsize - 1) / 
data->fsp.f_bsize;
                data->used = 1;
        }
 
@@ -229,8 +230,9 @@ static int calculate_installed_size(const alpm_list_t 
*mount_points,
                }
 
                data = mp->data;
-               data->blocks_needed += 
(long)ceil((double)(archive_entry_size(entry)) /
-                                           (double)(data->fsp.f_bsize));
+               /* the addition of (divisor - 1) performs ceil() with integer 
division */
+               data->blocks_needed +=
+                       (archive_entry_size(entry) + data->fsp.f_bsize - 1) / 
data->fsp.f_bsize;
                data->used = 1;
        }
 
@@ -259,8 +261,8 @@ int _alpm_check_diskspace(pmtrans_t *trans, pmdb_t 
*db_local)
        if(replaces) {
                numtargs += replaces;
                for(targ = trans->remove; targ; targ = targ->next, current++) {
-                       double percent = (double)current / (double)numtargs;
-                       PROGRESS(trans, PM_TRANS_PROGRESS_DISKSPACE_START, "", 
(int)(percent * 100),
+                       int percent = (current * 100) / numtargs;
+                       PROGRESS(trans, PM_TRANS_PROGRESS_DISKSPACE_START, "", 
percent,
                                        numtargs, current);
 
                        pkg = targ->data;
@@ -269,8 +271,8 @@ int _alpm_check_diskspace(pmtrans_t *trans, pmdb_t 
*db_local)
        }
 
        for(targ = trans->add; targ; targ = targ->next, current++) {
-               double percent = (double)current / (double)numtargs;
-               PROGRESS(trans, PM_TRANS_PROGRESS_DISKSPACE_START, "", 
(int)(percent * 100),
+               int percent = (current * 100) / numtargs;
+               PROGRESS(trans, PM_TRANS_PROGRESS_DISKSPACE_START, "", percent,
                                numtargs, current);
 
                pkg = targ->data;
diff --git a/lib/libalpm/remove.c b/lib/libalpm/remove.c
index e1249fd..d4e3b94 100644
--- a/lib/libalpm/remove.c
+++ b/lib/libalpm/remove.c
@@ -425,14 +425,13 @@ int _alpm_remove_packages(pmtrans_t *trans, pmdb_t *db)
                        /* iterate through the list backwards, unlinking files 
*/
                        newfiles = alpm_list_reverse(files);
                        for(lp = newfiles; lp; lp = alpm_list_next(lp)) {
-                               double percent;
+                               int percent;
                                unlink_file(info, lp->data, NULL, trans->flags 
& PM_TRANS_FLAG_NOSAVE);
 
                                /* update progress bar after each file */
-                               percent = (double)position / (double)filenum;
+                               percent = (position * 100) / filenum;
                                PROGRESS(trans, PM_TRANS_PROGRESS_REMOVE_START, 
info->name,
-                                               (int)(percent * 100), pkg_count,
-                                               (pkg_count - targcount + 1));
+                                               percent, pkg_count, (pkg_count 
- targcount + 1));
                                position++;
                        }
                        alpm_list_free(newfiles);
-- 
1.7.3.5


Reply via email to