FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > ArchLinux > ArchLinux Pacman Development

 
 
LinkBack Thread Tools
 
Old 01-10-2011, 01:50 AM
Dan McGee
 
Default Remove need for floating point division in backend

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 <dan@archlinux.org>
---
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)
",
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
",
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
 

Thread Tools




All times are GMT. The time now is 01:42 AM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org