svn commit: r235887 - stable/9/usr.bin/lastcomm

Konstantin Belousov kib at FreeBSD.org
Thu May 24 08:43:11 UTC 2012


Author: kib
Date: Thu May 24 08:43:10 2012
New Revision: 235887
URL: http://svn.freebsd.org/changeset/base/235887

Log:
  MFC r235541:
  Allow to specify strftime(3) format for process start end exit times.

Modified:
  stable/9/usr.bin/lastcomm/lastcomm.1
  stable/9/usr.bin/lastcomm/lastcomm.c
Directory Properties:
  stable/9/usr.bin/lastcomm/   (props changed)

Modified: stable/9/usr.bin/lastcomm/lastcomm.1
==============================================================================
--- stable/9/usr.bin/lastcomm/lastcomm.1	Thu May 24 08:00:26 2012	(r235886)
+++ stable/9/usr.bin/lastcomm/lastcomm.1	Thu May 24 08:43:10 2012	(r235887)
@@ -28,7 +28,7 @@
 .\"	From: @(#)lastcomm.1	8.1 (Berkeley) 6/6/93
 .\" $FreeBSD$
 .\"
-.Dd May 14, 2007
+.Dd May 17, 2012
 .Dt LASTCOMM 1
 .Os
 .Sh NAME
@@ -38,6 +38,7 @@
 .Nm
 .Op Fl EScesu
 .Op Fl f Ar file
+.Op Cm + Ns Ar format
 .Op Ar command ...\&
 .Op Ar user ...\&
 .Op Ar terminal ...\&
@@ -77,6 +78,15 @@ is a single dash
 reads accounting entries from the standard input.
 .El
 .Pp
+An operand with a leading plus sign
+.Pq Sq +
+is followed a user-defined format string which specifies the format
+in which to display the process's start or exit date and time.
+The format string may contain any of the conversion specifications
+described in the
+.Xr strftime 3
+manual page, as well as arbitrary text.
+.Pp
 If no options are specified,
 .Fl cS
 is assumed.
@@ -165,6 +175,7 @@ will print details of each terminating c
 .Sh SEE ALSO
 .Xr last 1 ,
 .Xr sigaction 2 ,
+.Xr strftime 3 ,
 .Xr acct 5 ,
 .Xr core 5
 .Sh HISTORY

Modified: stable/9/usr.bin/lastcomm/lastcomm.c
==============================================================================
--- stable/9/usr.bin/lastcomm/lastcomm.c	Thu May 24 08:00:26 2012	(r235886)
+++ stable/9/usr.bin/lastcomm/lastcomm.c	Thu May 24 08:43:10 2012	(r235887)
@@ -52,6 +52,7 @@ __FBSDID("$FreeBSD$");
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <time.h>
 #include <unistd.h>
 #include "pathnames.h"
 
@@ -82,10 +83,12 @@ main(int argc, char *argv[])
 	int (*readrec)(FILE *f, struct acctv2 *av2);
 	time_t t;
 	int ch, rv;
-	const char *acctfile;
+	const char *acctfile, *format;
+	char buf[1024];
 	int flags = 0;
 
 	acctfile = _PATH_ACCT;
+	format = NULL;
 	while ((ch = getopt(argc, argv, "f:usecSE")) != -1)
 		switch((char)ch) {
 		case 'f':
@@ -126,6 +129,12 @@ main(int argc, char *argv[])
 	argc -= optind;
 	argv += optind;
 
+	if (argc > 0 && **argv == '+') {
+		format = *argv + 1; /* skip + */
+		argc--;
+		argv++;
+	}
+
 	if (strcmp(acctfile, "-") == 0) {
 		fp = stdin;
 		readrec = readrec_forward;
@@ -177,14 +186,24 @@ main(int argc, char *argv[])
 		
 		/* starting time */
 		if (flags & AC_BTIME) {
-			(void)printf(" %.16s", ctime(&ab.ac_btime));
+			if (format != NULL) {
+				(void)strftime(buf, sizeof(buf), format,
+				    localtime(&ab.ac_btime));
+				(void)printf(" %s", buf);
+			} else
+				(void)printf(" %.16s", ctime(&ab.ac_btime));
 		}
 		
 		/* exit time (starting time + elapsed time )*/
 		if (flags & AC_FTIME) {
 			t = ab.ac_btime;
 			t += (time_t)(ab.ac_etime / 1000000);
-			(void)printf(" %.16s", ctime(&t));
+			if (format != NULL) {
+				(void)strftime(buf, sizeof(buf), format,
+				    localtime(&t));
+				(void)printf(" %s", buf);
+			} else
+				(void)printf(" %.16s", ctime(&t));
 		}
 		printf("\n");
  	}
@@ -250,6 +269,7 @@ static void
 usage(void)
 {
 	(void)fprintf(stderr,
-"usage: lastcomm [-EScesu] [-f file] [command ...] [user ...] [terminal ...]\n");
+	    "usage: lastcomm [-EScesu] [-f file] [+format] [command ...] "
+	    "[user ...] [terminal ...]\n");
 	exit(1);
 }


More information about the svn-src-stable-9 mailing list