svn commit: r187276 - stable/6/usr.bin/du

Giorgos Keramidas keramida at FreeBSD.org
Wed Jan 14 20:26:49 PST 2009


Author: keramida (doc committer)
Date: Thu Jan 15 04:26:45 2009
New Revision: 187276
URL: http://svn.freebsd.org/changeset/base/187276

Log:
  MFC 176561
  
  Implement from scratch a -l option for du(1), to match the same option
  of the GNU utility.  The default behavior of our original `du' is to
  count hardlinked files only once for each invocation of the utility.
  With the new -l option they count towards the final size every time
  they are found.

Modified:
  stable/6/usr.bin/du/   (props changed)
  stable/6/usr.bin/du/du.1
  stable/6/usr.bin/du/du.c

Modified: stable/6/usr.bin/du/du.1
==============================================================================
--- stable/6/usr.bin/du/du.1	Thu Jan 15 04:26:39 2009	(r187275)
+++ stable/6/usr.bin/du/du.1	Thu Jan 15 04:26:45 2009	(r187276)
@@ -32,7 +32,7 @@
 .\"	@(#)du.1	8.2 (Berkeley) 4/1/94
 .\" $FreeBSD$
 .\"
-.Dd May 6, 2006
+.Dd February 25, 2008
 .Dt DU 1
 .Os
 .Sh NAME
@@ -43,6 +43,7 @@
 .Op Fl H | L | P
 .Op Fl a | s | d Ar depth
 .Op Fl c
+.Op Fl l
 .Op Fl h | k | m
 .Op Fl n
 .Op Fl x
@@ -94,6 +95,15 @@ directories deep.
 Display a grand total.
 .It Fl k
 Display block counts in 1024-byte (1-Kbyte) blocks.
+.It Fl l
+If a file has multiple hard links, count its size many times.
+The default behavior of
+.Nm
+is to count files with multiple hard links only once.
+When the
+.Fl l
+option is specified, the hard link checks are disabled, and these files
+are counted (and displayed) as many times as they are found.
 .It Fl m
 Display block counts in 1048576-byte (1-Mbyte) blocks.
 .It Fl n
@@ -116,11 +126,6 @@ or
 .Fl L
 options are specified, storage used by any symbolic links which are
 followed is not counted or displayed.
-.Pp
-Files having multiple hard links are counted (and displayed) a single
-time per
-.Nm
-execution.
 .Sh ENVIRONMENT
 .Bl -tag -width BLOCKSIZE
 .It Ev BLOCKSIZE

Modified: stable/6/usr.bin/du/du.c
==============================================================================
--- stable/6/usr.bin/du/du.c	Thu Jan 15 04:26:39 2009	(r187275)
+++ stable/6/usr.bin/du/du.c	Thu Jan 15 04:26:45 2009	(r187276)
@@ -90,20 +90,22 @@ main(int argc, char *argv[])
 	int		ftsoptions;
 	int		listall;
 	int		depth;
-	int		Hflag, Lflag, Pflag, aflag, sflag, dflag, cflag, hflag, ch, notused, rval;
+	int		Hflag, Lflag, Pflag, aflag, sflag, dflag, cflag;
+	int		hflag, lflag, ch, notused, rval;
 	char 		**save;
 	static char	dot[] = ".";
 
 	setlocale(LC_ALL, "");
 
-	Hflag = Lflag = Pflag = aflag = sflag = dflag = cflag = hflag = 0;
+	Hflag = Lflag = Pflag = aflag = sflag = dflag = cflag = hflag =
+	    lflag = 0;
 
 	save = argv;
 	ftsoptions = 0;
 	depth = INT_MAX;
 	SLIST_INIT(&ignores);
 
-	while ((ch = getopt(argc, argv, "HI:LPasd:chkmnrx")) != -1)
+	while ((ch = getopt(argc, argv, "HI:LPasd:chklmnrx")) != -1)
 		switch (ch) {
 			case 'H':
 				Hflag = 1;
@@ -147,6 +149,9 @@ main(int argc, char *argv[])
 				hflag = 0;
 				putenv("BLOCKSIZE=1024");
 				break;
+			case 'l':
+				lflag = 1;
+				break;
 			case 'm':
 				hflag = 0;
 				putenv("BLOCKSIZE=1048576");
@@ -257,7 +262,8 @@ main(int argc, char *argv[])
 				if (ignorep(p))
 					break;
 
-				if (p->fts_statp->st_nlink > 1 && linkchk(p))
+				if (lflag == 0 &&
+				    p->fts_statp->st_nlink > 1 && linkchk(p))
 					break;
 
 				if (listall || p->fts_level == 0) {
@@ -443,7 +449,8 @@ static void
 usage(void)
 {
 	(void)fprintf(stderr,
-		"usage: du [-H | -L | -P] [-a | -s | -d depth] [-c] [-h | -k | -m] [-n] [-x] [-I mask] [file ...]\n");
+		"usage: du [-H | -L | -P] [-a | -s | -d depth] [-c] "
+		"[-l] [-h | -k | -m] [-n] [-x] [-I mask] [file ...]\n");
 	exit(EX_USAGE);
 }
 


More information about the svn-src-all mailing list