Implement a printtotal function to avoid code repetition.

This commit is contained in:
ahoka 2008-11-02 02:27:32 +00:00
parent 69f1577429
commit c111d82975
1 changed files with 33 additions and 41 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: print.c,v 1.42 2006/12/14 14:15:26 christos Exp $ */
/* $NetBSD: print.c,v 1.43 2008/11/02 02:27:32 ahoka Exp $ */
/*
* Copyright (c) 1989, 1993, 1994
@ -37,7 +37,7 @@
#if 0
static char sccsid[] = "@(#)print.c 8.5 (Berkeley) 7/28/94";
#else
__RCSID("$NetBSD: print.c,v 1.42 2006/12/14 14:15:26 christos Exp $");
__RCSID("$NetBSD: print.c,v 1.43 2008/11/02 02:27:32 ahoka Exp $");
#endif
#endif /* not lint */
@ -65,6 +65,7 @@ extern int termwidth;
static int printaname(FTSENT *, int, int);
static void printlink(FTSENT *);
static void printtime(time_t);
static void printtotal(DISPLAY *dp);
static int printtype(u_int);
static time_t now;
@ -94,19 +95,8 @@ printlong(DISPLAY *dp)
now = time(NULL);
if (dp->list->fts_level != FTS_ROOTLEVEL && (f_longform || f_size)) {
if (f_humanize) {
if ((humanize_number(szbuf, sizeof(szbuf), (int64_t)dp->stotal,
"", HN_AUTOSCALE,
(HN_DECIMAL | HN_B | HN_NOSPACE))) == -1)
err(1, "humanize_number");
(void)printf("total %s\n", szbuf);
} else {
(void)printf("total %llu\n",
(long long)(howmany(dp->btotal, blocksize)));
}
}
printtotal(dp); /* "total: %u\n" */
for (p = dp->list; p; p = p->fts_link) {
if (IS_NOPRINT(p))
continue;
@ -181,7 +171,6 @@ printcol(DISPLAY *dp)
FTSENT *p;
int base, chcnt, col, colwidth, num;
int numcols, numrows, row;
char szbuf[5];
colwidth = dp->maxlen;
if (f_inode)
@ -224,18 +213,8 @@ printcol(DISPLAY *dp)
if (num % numcols)
++numrows;
if (dp->list->fts_level != FTS_ROOTLEVEL && (f_longform || f_size)) {
if (f_humanize) {
if ((humanize_number(szbuf, sizeof(szbuf), (int64_t)dp->stotal,
"", HN_AUTOSCALE,
(HN_DECIMAL | HN_B | HN_NOSPACE))) == -1)
err(1, "humanize_number");
(void)printf("total %s\n", szbuf);
} else {
(void)printf("total %llu\n",
(long long)(howmany(dp->btotal, blocksize)));
}
}
printtotal(dp); /* "total: %u\n" */
for (row = 0; row < numrows; ++row) {
for (base = row, chcnt = col = 0; col < numcols; ++col) {
chcnt = printaname(array[base], dp->s_inode,
@ -255,7 +234,6 @@ printacol(DISPLAY *dp)
FTSENT *p;
int chcnt, col, colwidth;
int numcols;
char szbuf[5];
colwidth = dp->maxlen;
if (f_inode)
@ -279,18 +257,8 @@ printacol(DISPLAY *dp)
numcols = termwidth / colwidth;
colwidth = termwidth / numcols; /* spread out if possible */
if (dp->list->fts_level != FTS_ROOTLEVEL && (f_longform || f_size)) {
if (f_humanize) {
if ((humanize_number(szbuf, sizeof(szbuf), (int64_t)dp->stotal,
"", HN_AUTOSCALE,
(HN_DECIMAL | HN_B | HN_NOSPACE))) == -1)
err(1, "humanize_number");
(void)printf("total %s\n", szbuf);
} else {
(void)printf("total %llu\n",
(long long)(howmany(dp->btotal, blocksize)));
}
}
printtotal(dp); /* "total: %u\n" */
chcnt = col = 0;
for (p = dp->list; p; p = p->fts_link) {
if (IS_NOPRINT(p))
@ -406,6 +374,30 @@ printtime(time_t ftime)
(void)putchar(' ');
}
/*
* Display total used disk space in the form "total: %u\n".
* Note: POSIX (IEEE Std 1003.1-2001) says this should be always in 512 blocks,
* but we humanise it with -h and use 1024 with -k.
*/
static void
printtotal(DISPLAY *dp)
{
char szbuf[5];
if (dp->list->fts_level != FTS_ROOTLEVEL && (f_longform || f_size)) {
if (f_humanize) {
if ((humanize_number(szbuf, sizeof(szbuf), (int64_t)dp->stotal,
"", HN_AUTOSCALE,
(HN_DECIMAL | HN_B | HN_NOSPACE))) == -1)
err(1, "humanize_number");
(void)printf("total %s\n", szbuf);
} else {
(void)printf("total %llu\n",
(long long)(howmany(dp->btotal, blocksize)));
}
}
}
static int
printtype(u_int mode)
{