local version
[unix-history] / usr / src / usr.bin / last / last.c
index 8a74d03..d3430c5 100644 (file)
@@ -1,4 +1,4 @@
-static char *sccsid = "@(#)last.c      4.1 (Berkeley) %G%";
+static char *sccsid = "@(#)last.c      4.3 (Berkeley) %G%";
 /*
  * last
  */
 /*
  * last
  */
@@ -37,6 +37,8 @@ main(ac, av)
        long otime;
        struct stat stb;
        int print;
        long otime;
        struct stat stb;
        int print;
+       char * crmsg = (char *)0;
+       long crtime;
  
        time(&buf[0].ut_time);
        ac--, av++;
  
        time(&buf[0].ut_time);
        ac--, av++;
@@ -77,7 +79,7 @@ main(ac, av)
                                if (ttnames[i][0] == 0) {
                                        strncpy(ttnames[i], bp->ut_line,
                                            sizeof(bp->ut_line));
                                if (ttnames[i][0] == 0) {
                                        strncpy(ttnames[i], bp->ut_line,
                                            sizeof(bp->ut_line));
-                                       otime = 0;
+                                       otime = logouts[i];
                                        logouts[i] = bp->ut_time;
                                        break;
                                }
                                        logouts[i] = bp->ut_time;
                                        break;
                                }
@@ -94,7 +96,7 @@ main(ac, av)
                                        long delta;
                                        if (otime < 0) {
                                                otime = -otime;
                                        long delta;
                                        if (otime < 0) {
                                                otime = -otime;
-                                               printf("- crash");
+                                               printf("- %s", crmsg);
                                        } else
                                                printf("- %5.5s",
                                                    ctime(&otime)+11);
                                        } else
                                                printf("- %5.5s",
                                                    ctime(&otime)+11);
@@ -109,10 +111,14 @@ main(ac, av)
                                }
                                fflush(stdout);
                        }
                                }
                                fflush(stdout);
                        }
-                       if (lineq(bp->ut_line, "~") ||
-                           lineq(bp->ut_line, "tty~"))
-                               for (i = 0; *ttnames[i] && i < MAXTTYS; i++)
+                       if (lineq(bp->ut_line, "~")) {
+                               for (i = 0; i < MAXTTYS; i++)
                                        logouts[i] = -bp->ut_time;
                                        logouts[i] = -bp->ut_time;
+                               if (nameq(bp->ut_name, "shutdown"))
+                                       crmsg = "down ";
+                               else
+                                       crmsg = "crash";
+                       }
                }
        }
        ct = ctime(&buf[0].ut_time);
                }
        }
        ct = ctime(&buf[0].ut_time);
@@ -139,7 +145,7 @@ want(bp)
        register char **av;
        register int ac;
 
        register char **av;
        register int ac;
 
-       if (bp->ut_line[0] == '~')
+       if (bp->ut_line[0] == '~' && bp->ut_name[0] == '\0')
                strcpy(bp->ut_name, "reboot");          /* bandaid */
        if (bp->ut_name[0] == 0)
                return (0);
                strcpy(bp->ut_name, "reboot");          /* bandaid */
        if (bp->ut_name[0] == 0)
                return (0);