Author: kib
Date: Thu May 17 11:10:13 2012
New Revision: 235541
URL: http://svn.freebsd.org/changeset/base/235541

Log:
  Allow to specify strftime(3) format for process start end exit times.
  
  Submitted by: Andrey Zonov <andrey zonov org>
  MFC after:    1 week

Modified:
  head/usr.bin/lastcomm/lastcomm.1
  head/usr.bin/lastcomm/lastcomm.c

Modified: head/usr.bin/lastcomm/lastcomm.1
==============================================================================
--- head/usr.bin/lastcomm/lastcomm.1    Thu May 17 10:36:32 2012        
(r235540)
+++ head/usr.bin/lastcomm/lastcomm.1    Thu May 17 11:10:13 2012        
(r235541)
@@ -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: head/usr.bin/lastcomm/lastcomm.c
==============================================================================
--- head/usr.bin/lastcomm/lastcomm.c    Thu May 17 10:36:32 2012        
(r235540)
+++ head/usr.bin/lastcomm/lastcomm.c    Thu May 17 11:10:13 2012        
(r235541)
@@ -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);
 }
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to