w: bassman emulation with -o option

A patch from Debian.

Bug-Debian: http://bugs.debian.org/414906
Backported-by: Sami Kerola <kerolasa@iki.fi>
This commit is contained in:
Craig Small 2009-11-24 11:00:39 +11:00 committed by Craig Small
parent 04ce4db830
commit a0a51eb921
2 changed files with 19 additions and 2 deletions

5
w.1
View File

@ -5,7 +5,7 @@
w \- Show who is logged on and what they are doing. w \- Show who is logged on and what they are doing.
.SH SYNOPSIS .SH SYNOPSIS
.B w .B w
.RB [ \-husfV ] .RB [ \-husfV- ]
.RI [ user ] .RI [ user ]
.SH DESCRIPTION .SH DESCRIPTION
.B w .B w
@ -55,6 +55,9 @@ field is shown by default.
.B "\-V " .B "\-V "
Display version information. Display version information.
.TP 0.5i .TP 0.5i
.B "\-o "
Old style output. Prints blank space for idle times less than one minute.
.TP 0.5i
.B "user " .B "user "
Show information about the specified user only. Show information about the specified user only.

16
w.c
View File

@ -31,6 +31,7 @@
#include <termios.h> #include <termios.h>
static int ignoreuser = 0; /* for '-u' */ static int ignoreuser = 0; /* for '-u' */
static int oldstyle = 0; /* for '-o' */
static proc_t **procs; /* our snapshot of the process table */ static proc_t **procs; /* our snapshot of the process table */
typedef struct utmp utmp_t; typedef struct utmp utmp_t;
@ -77,6 +78,16 @@ static void print_time_ival7(time_t t, int centi_sec, FILE* fout) {
printf(" ? "); printf(" ? ");
return; return;
} }
if (oldstyle) {
if (t >= 48*60*60) /* > 2 days */
fprintf(fout, " %2ludays", t/(24*60*60));
else if (t >= 60*60) /* > 1 hour */
fprintf(fout, " %2lu:%02u ", t/(60*60), (unsigned) ((t/60)%60));
else if (t > 60) /* > 1 minute */
fprintf(fout, " %2lu:%02um", t/60, (unsigned) t%60);
else
fprintf(fout, " ");
} else {
if (t >= 48*60*60) /* > 2 days */ if (t >= 48*60*60) /* > 2 days */
fprintf(fout, " %2ludays", t/(24*60*60)); fprintf(fout, " %2ludays", t/(24*60*60));
else if (t >= 60*60) /* > 1 hour */ else if (t >= 60*60) /* > 1 hour */
@ -85,6 +96,7 @@ static void print_time_ival7(time_t t, int centi_sec, FILE* fout) {
fprintf(fout, " %2lu:%02u ", t/60, (unsigned) t%60); fprintf(fout, " %2lu:%02u ", t/60, (unsigned) t%60);
else else
fprintf(fout, " %2lu.%02us", t, centi_sec); fprintf(fout, " %2lu.%02us", t, centi_sec);
}
} }
/**** stat the device file to get an idle time */ /**** stat the device file to get an idle time */
@ -240,7 +252,7 @@ int main(int argc, char **argv) {
#endif #endif
setlocale(LC_ALL, ""); setlocale(LC_ALL, "");
for (args=0; (ch = getopt(argc, argv, "hlusfV")) != EOF; args++) for (args=0; (ch = getopt(argc, argv, "hlusfVo")) != EOF; args++)
switch (ch) { switch (ch) {
case 'h': header = 0; break; case 'h': header = 0; break;
case 'l': longform = 1; break; case 'l': longform = 1; break;
@ -248,6 +260,7 @@ int main(int argc, char **argv) {
case 'f': from = !from; break; case 'f': from = !from; break;
case 'V': display_version(); exit(0); case 'V': display_version(); exit(0);
case 'u': ignoreuser = 1; break; case 'u': ignoreuser = 1; break;
case 'o': oldstyle = 1; break;
default: default:
printf("usage: w -hlsufV [user]\n" printf("usage: w -hlsufV [user]\n"
" -h skip header\n" " -h skip header\n"
@ -255,6 +268,7 @@ int main(int argc, char **argv) {
" -s short listing\n" " -s short listing\n"
" -u ignore uid of processes\n" " -u ignore uid of processes\n"
" -f toggle FROM field (default %s)\n" " -f toggle FROM field (default %s)\n"
" -o old-style output\n"
" -V display version\n", FROM_STRING); " -V display version\n", FROM_STRING);
exit(1); exit(1);
} }