From 6e8b79ebd8186be3e955bb26877f72f45292edf7 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 16 Oct 2013 17:54:29 +0100 Subject: [PATCH] Add -s support for du(1) --- du.1 | 3 +++ du.c | 22 +++++++++++++++++----- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/du.1 b/du.1 index a5046e1..932e693 100644 --- a/du.1 +++ b/du.1 @@ -16,3 +16,6 @@ directory is displayed. .TP .BI \-a Display an entry for each file in the file hierarchy. +.TP +.BI \-s +Display only the grand total for the specified files. diff --git a/du.c b/du.c index bfb40e6..3c6461b 100644 --- a/du.c +++ b/du.c @@ -14,8 +14,10 @@ static long blksize = 512; static bool aflag = false; +static bool sflag = false; static long du(const char *); +static void print(long n, char *path); void usage(void) @@ -27,11 +29,15 @@ int main(int argc, char *argv[]) { char *bsize; + long n; ARGBEGIN { case 'a': aflag = true; break; + case 's': + sflag = true; + break; default: usage(); } ARGEND; @@ -41,10 +47,15 @@ main(int argc, char *argv[]) blksize = estrtol(bsize, 0); if (argc < 1) { - du("."); + n = du("."); + if (sflag) + print(n, realpath(".", NULL)); } else { - for (; argc > 0; argc--, argv++) - du(argv[0]); + for (; argc > 0; argc--, argv++) { + n = du(argv[0]); + if (sflag) + print(n, realpath(argv[0], NULL)); + } } return EXIT_SUCCESS; } @@ -106,7 +117,7 @@ du(const char *path) } else { m = 512 * st.st_blocks / blksize; n += m; - if (aflag) + if (aflag && !sflag) print(m, realpath(dent->d_name, NULL)); } } @@ -115,6 +126,7 @@ du(const char *path) } } - print(n, realpath(path, NULL)); + if (!sflag) + print(n, realpath(path, NULL)); return n; }