aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--util-linux/more.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/util-linux/more.c b/util-linux/more.c
index c424a0e4b..7160b8b00 100644
--- a/util-linux/more.c
+++ b/util-linux/more.c
@@ -113,9 +113,12 @@ int more_main(int argc UNUSED_PARAM, char **argv)
loop_top:
if (input != 'r' && please_display_more_prompt) {
len = printf("--More-- ");
- if (st.st_size > 0) {
+ if (st.st_size != 0) {
+ uoff_t d = (uoff_t)st.st_size / 100;
+ if (d == 0)
+ d = 1;
len += printf("(%u%% of %"OFF_FMT"u bytes)",
- (int) (ftello(file)*100 / st.st_size),
+ (int) ((uoff_t)ftello(file) / d),
st.st_size);
}
fflush_all();
@@ -159,7 +162,7 @@ int more_main(int argc UNUSED_PARAM, char **argv)
/* Crudely convert tabs into spaces, which are
* a bajillion times easier to deal with. */
if (c == '\t') {
- spaces = CONVERTED_TAB_SIZE - 1;
+ spaces = ((unsigned)~len) % CONVERTED_TAB_SIZE;
c = ' ';
}