=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/last/last.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- src/usr.bin/last/last.c 1997/07/20 09:07:17 1.5 +++ src/usr.bin/last/last.c 1997/07/25 02:23:34 1.6 @@ -1,4 +1,4 @@ -/* $OpenBSD: last.c,v 1.5 1997/07/20 09:07:17 jdm Exp $ */ +/* $OpenBSD: last.c,v 1.6 1997/07/25 02:23:34 mickey Exp $ */ /* $NetBSD: last.c,v 1.6 1994/12/24 16:49:02 cgd Exp $ */ /* @@ -44,7 +44,7 @@ #if 0 static char sccsid[] = "@(#)last.c 8.2 (Berkeley) 4/2/94"; #endif -static char rcsid[] = "$OpenBSD: last.c,v 1.5 1997/07/20 09:07:17 jdm Exp $"; +static char rcsid[] = "$OpenBSD: last.c,v 1.6 1997/07/25 02:23:34 mickey Exp $"; #endif /* not lint */ #include @@ -88,6 +88,7 @@ static time_t currentout; /* current logout value */ static long maxrec; /* records to display */ static char *file = _PATH_WTMP; /* wtmp file */ +static int fulltime = 0; /* Display seconds? */ static time_t snaptime; /* if != 0, we will only * report users logged in * at this snapshot time @@ -115,7 +116,7 @@ maxrec = -1; snaptime = 0; - while ((ch = getopt(argc, argv, "0123456789f:h:t:d:")) != -1) + while ((ch = getopt(argc, argv, "0123456789f:h:t:d:T")) != -1) switch (ch) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': @@ -146,10 +147,13 @@ case 'd': snaptime = dateconv(optarg); break; + case 'T': + fulltime = -1; + break; case '?': default: (void)fprintf(stderr, - "usage: last [-#] [-f file] [-t tty]" + "usage: last [-#] [-f file] [-T] [-t tty]" " [-h host] [-d [MMDD]hhmm[.SS]]" " [user ...]\n"); exit(1); @@ -220,17 +224,23 @@ void wtmp() { - struct utmp *bp; /* current structure */ - TTY *T; /* tty list entry */ - struct stat stb; /* stat of file for size */ - time_t bl, delta; /* time difference */ + struct utmp *bp; /* current structure */ + TTY *T; /* tty list entry */ + struct stat stb; /* stat of file for size */ + time_t bl, delta; /* time difference */ + int timesize; /* how long time string gonna be */ int bytes, wfd; char *ct, *crmsg; - int snapfound = 0; /* found snapshot entry? */ + int snapfound = 0; /* found snapshot entry? */ if ((wfd = open(file, O_RDONLY, 0)) < 0 || fstat(wfd, &stb) == -1) err(1, "%s", file); bl = (stb.st_size + sizeof(buf) - 1) / sizeof(buf); + if (fulltime) + timesize = 8; /* HH:MM:SS */ + else + timesize = 5; /* HH:MM */ + (void)time(&buf[0].ut_time); (void)signal(SIGINT, onintr); (void)signal(SIGQUIT, onintr); @@ -265,12 +275,13 @@ */ if (want(bp, NO)) { ct = ctime(&bp->ut_time); - printf("%-*.*s %-*.*s %-*.*s %10.10s %5.5s \n", + printf("%-*.*s %-*.*s %-*.*s %10.10s %*.*s \n", UT_NAMESIZE, UT_NAMESIZE, bp->ut_name, UT_LINESIZE, UT_LINESIZE, bp->ut_line, UT_HOSTSIZE, UT_HOSTSIZE, - bp->ut_host, ct, ct + 11); + bp->ut_host, ct, timesize, + timesize, ct + 11); if (maxrec != -1 && !--maxrec) return; } @@ -284,11 +295,11 @@ && !bp->ut_line[1]) { if (want(bp, NO)) { ct = ctime(&bp->ut_time); - printf("%-*.*s %-*.*s %-*.*s %10.10s %5.5s \n", + printf("%-*.*s %-*.*s %-*.*s %10.10s %*.*s \n", UT_NAMESIZE, UT_NAMESIZE, bp->ut_name, UT_LINESIZE, UT_LINESIZE, bp->ut_line, UT_HOSTSIZE, UT_HOSTSIZE, bp->ut_host, - ct, ct + 11); + ct, timesize, timesize, ct + 11); if (maxrec && !--maxrec) return; } @@ -315,11 +326,11 @@ T->logout < 0)))) { snapfound = 1; ct = ctime(&bp->ut_time); - printf("%-*.*s %-*.*s %-*.*s %10.10s %5.5s ", - UT_NAMESIZE, UT_NAMESIZE, bp->ut_name, - UT_LINESIZE, UT_LINESIZE, bp->ut_line, - UT_HOSTSIZE, UT_HOSTSIZE, bp->ut_host, - ct, ct + 11); + printf("%-*.*s %-*.*s %-*.*s %10.10s %*.*s ", + UT_NAMESIZE, UT_NAMESIZE, bp->ut_name, + UT_LINESIZE, UT_LINESIZE, bp->ut_line, + UT_HOSTSIZE, UT_HOSTSIZE, bp->ut_host, + ct, timesize, timesize, ct + 11); if (!T->logout) puts(" still logged in"); else { @@ -328,15 +339,18 @@ printf("- %s", crmsg); } else - printf("- %5.5s", + printf("- %*.*s", + timesize, timesize, ctime(&T->logout)+11); delta = T->logout - bp->ut_time; if (delta < SECSPERDAY) - printf(" (%5.5s)\n", + printf(" (%*.*s)\n", + timesize, timesize, asctime(gmtime(&delta))+11); else - printf(" (%ld+%5.5s)\n", + printf(" (%ld+%*.*s)\n", delta / SECSPERDAY, + timesize, timesize, asctime(gmtime(&delta))+11); } if (maxrec != -1 && !--maxrec) @@ -346,7 +360,7 @@ } } ct = ctime(&buf[0].ut_time); - printf("\nwtmp begins %10.10s %5.5s \n", ct, ct + 11); + printf("\nwtmp begins %10.10s %*.*s \n", ct, timesize, timesize, ct + 11); } /* @@ -575,7 +589,7 @@ char *ct; ct = ctime(&buf[0].ut_time); - printf("\ninterrupted %10.10s %5.5s \n", ct, ct + 11); + printf("\ninterrupted %10.10s %8.8s \n", ct, ct + 11); if (signo == SIGINT) exit(1); (void)fflush(stdout); /* fix required for rsh */