Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 1 May 2010 14:36:04 +0000 (UTC)
From:      Jilles Tjoelker <jilles@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org
Subject:   svn commit: r207466 - stable/8/usr.bin/stat
Message-ID:  <201005011436.o41Ea5eo040499@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jilles
Date: Sat May  1 14:36:04 2010
New Revision: 207466
URL: http://svn.freebsd.org/changeset/base/207466

Log:
  MFC r207153: stat: Allow -f %Sf to display the file flags symbolically.
  
  PR:		124349

Modified:
  stable/8/usr.bin/stat/stat.1
  stable/8/usr.bin/stat/stat.c
Directory Properties:
  stable/8/usr.bin/stat/   (props changed)

Modified: stable/8/usr.bin/stat/stat.1
==============================================================================
--- stable/8/usr.bin/stat/stat.1	Sat May  1 14:33:26 2010	(r207465)
+++ stable/8/usr.bin/stat/stat.1	Sat May  1 14:36:04 2010	(r207466)
@@ -36,7 +36,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd April 27, 2007
+.Dd April 24, 2010
 .Dt STAT 1
 .Os
 .Sh NAME
@@ -239,6 +239,11 @@ Display date in
 format.
 .It Cm dr
 Display actual device name.
+.It Cm f
+Display the flags of
+.Ar file
+as in
+.Nm ls Fl lTdo .
 .It Cm gu
 Display group or user name.
 .It Cm p

Modified: stable/8/usr.bin/stat/stat.c
==============================================================================
--- stable/8/usr.bin/stat/stat.c	Sat May  1 14:33:26 2010	(r207465)
+++ stable/8/usr.bin/stat/stat.c	Sat May  1 14:36:04 2010	(r207466)
@@ -189,6 +189,9 @@ int	format1(const struct stat *,	/* stat
 	    char *, size_t,		/* a place to put the output */
 	    int, int, int, int,		/* the parsed format */
 	    int, int);
+#if HAVE_STRUCT_STAT_ST_FLAGS
+char   *xfflagstostr(unsigned long);
+#endif
 
 char *timefmt;
 int linkfail;
@@ -340,6 +343,25 @@ main(int argc, char *argv[])
 	return (am_readlink ? linkfail : errs);
 }
 
+#if HAVE_STRUCT_STAT_ST_FLAGS
+/*
+ * fflagstostr() wrapper that leaks only once
+ */
+char *
+xfflagstostr(unsigned long fflags)
+{
+	static char *str = NULL;
+
+	if (str != NULL)
+		free(str);
+
+	str = fflagstostr(fflags);
+	if (str == NULL)
+		err(1, "fflagstostr");
+	return (str);
+}
+#endif /* HAVE_STRUCT_STAT_ST_FLAGS */
+
 void
 usage(const char *synopsis)
 {
@@ -732,8 +754,11 @@ format1(const struct stat *st,
 	case SHOW_st_flags:
 		small = (sizeof(st->st_flags) == 4);
 		data = st->st_flags;
-		sdata = NULL;
-		formats = FMTF_DECIMAL | FMTF_OCTAL | FMTF_UNSIGNED | FMTF_HEX;
+		sdata = xfflagstostr(st->st_flags);
+		if (*sdata == '\0')
+			sdata = "-";
+		formats = FMTF_DECIMAL | FMTF_OCTAL | FMTF_UNSIGNED | FMTF_HEX |
+		    FMTF_STRING;
 		if (ofmt == 0)
 			ofmt = FMTF_UNSIGNED;
 		break;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201005011436.o41Ea5eo040499>