Marc Balmer wrote:
> hmm, why are people so proud of their uptimes when it only show they
> don't care for their systems?
>
Below is a patch which adds an -i flag to 'uptime' converting an uptime
period to a size in inches:
evilkittens:w {160} ./uptime
11:13AM up 24 days, 16:42, 1 user, load averages: 0.14, 0.15, 0.13
evilkittens:w {161} ./uptime -i
11:13AM up 3 inches, 1 user, load averages: 0.14, 0.15, 0.13
evilkittens:w {162}
As you see, I better let my system run a bit longer :(
--- /usr/src/usr.bin/w/w.c Tue Jul 19 23:19:08 2005
+++ w.c Wed Jan 17 11:16:15 2007
@@ -92,6 +92,7 @@
int header = 1; /* true if -h flag: don't print heading */
int nflag = 1; /* true if -n flag: don't convert addrs */
int sortidle; /* sort bu idle time */
+int inches = 0; /* compute len of uptime in inches */
char *sel_user; /* login of particular user selected */
char domain[MAXHOSTNAMELEN];
@@ -137,7 +138,7 @@
p = "hiflM:N:asuw";
} else if (!strcmp(p, "uptime")) {
wcmd = 0;
- p = "";
+ p = "i";
} else
errx(1,
"this program should be invoked only as \"w\" or \"uptime\"");
@@ -149,7 +150,10 @@
header = 0;
break;
case 'i':
- sortidle = 1;
+ if (wcmd == 1)
+ sortidle = 1;
+ else
+ inches = 1;
break;
case 'M':
header = 0;
@@ -402,29 +406,36 @@
size = sizeof(boottime);
if (sysctl(mib, 2, &boottime, &size, NULL, 0) != -1) {
uptime = now - boottime.tv_sec;
- if (uptime > 59) {
- uptime += 30;
- days = uptime / SECSPERDAY;
- uptime %= SECSPERDAY;
- hrs = uptime / SECSPERHOUR;
- uptime %= SECSPERHOUR;
- mins = uptime / SECSPERMIN;
+ if (inches == 1) {
+ inches = uptime / (60*60*24*7);
(void)printf(" up");
- if (days > 0)
- (void)printf(" %d day%s,", days,
- days > 1 ? "s" : "");
- if (hrs > 0 && mins > 0)
- (void)printf(" %2d:%02d,", hrs, mins);
- else {
- if (hrs > 0)
- (void)printf(" %d hr%s,",
- hrs, hrs > 1 ? "s" : "");
- if (mins > 0 || (days == 0 && hrs == 0))
- (void)printf(" %d min%s,",
- mins, mins != 1 ? "s" : "");
- }
- } else
- printf(" %d secs,", uptime);
+ (void)printf(" %d inch%s,", inches, inches > 1 ? "es": "");
+ }
+ else {
+ if (uptime > 59) {
+ uptime += 30;
+ days = uptime / SECSPERDAY;
+ uptime %= SECSPERDAY;
+ hrs = uptime / SECSPERHOUR;
+ uptime %= SECSPERHOUR;
+ mins = uptime / SECSPERMIN;
+ (void)printf(" up");
+ if (days > 0)
+ (void)printf(" %d day%s,", days,
+ days > 1 ? "s" : "");
+ if (hrs > 0 && mins > 0)
+ (void)printf(" %2d:%02d,", hrs, mins);
+ else {
+ if (hrs > 0)
+ (void)printf(" %d hr%s,",
+ hrs, hrs > 1 ? "s" : "");
+ if (mins > 0 || (days == 0 && hrs == 0))
+ (void)printf(" %d min%s,",
+ mins, mins != 1 ? "s" : "");
+ }
+ } else
+ printf(" %d secs,", uptime);
+ }
}
/* Print number of users logged in to system */