more: fix tabs handling

function                                             old     new   delta
more_main                                            837     829      -8

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2011-03-07 02:01:52 +01:00
parent bff5f3f2b4
commit 82e785cf8c

View File

@ -113,9 +113,12 @@ int more_main(int argc UNUSED_PARAM, char **argv)
loop_top: loop_top:
if (input != 'r' && please_display_more_prompt) { if (input != 'r' && please_display_more_prompt) {
len = printf("--More-- "); 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)", len += printf("(%u%% of %"OFF_FMT"u bytes)",
(int) (ftello(file)*100 / st.st_size), (int) ((uoff_t)ftello(file) / d),
st.st_size); st.st_size);
} }
fflush_all(); fflush_all();
@ -159,7 +162,7 @@ int more_main(int argc UNUSED_PARAM, char **argv)
/* Crudely convert tabs into spaces, which are /* Crudely convert tabs into spaces, which are
* a bajillion times easier to deal with. */ * a bajillion times easier to deal with. */
if (c == '\t') { if (c == '\t') {
spaces = CONVERTED_TAB_SIZE - 1; spaces = ((unsigned)~len) % CONVERTED_TAB_SIZE;
c = ' '; c = ' ';
} }