%d => %ld in mailq for PDP-11's
[unix-history] / usr / src / usr.sbin / ac / ac.c
index 145e095..1c1d0f5 100644 (file)
@@ -1,7 +1,7 @@
 /*
 /*
- * acct [ -w wtmp ] [ -d ] [ -p ] [ people ]
+ * ac [ -w wtmp ] [ -d ] [ -p ] [ people ]
  */
  */
-static char *sccsid = "@(#)ac.c        4.1 (Berkeley) %G%";
+static char *sccsid = "@(#)ac.c        4.6 (Berkeley) %G%";
 
 #include <stdio.h>
 #include <ctype.h>
 
 #include <stdio.h>
 #include <ctype.h>
@@ -13,7 +13,10 @@ static char *sccsid = "@(#)ac.c      4.1 (Berkeley) %G%";
 #define NMAX sizeof(ibuf.ut_name)
 #define LMAX sizeof(ibuf.ut_line)
 
 #define NMAX sizeof(ibuf.ut_name)
 #define LMAX sizeof(ibuf.ut_line)
 
+/*
 #define        TSIZE   1000
 #define        TSIZE   1000
+*/
+#define TSIZE  6242
 #define        USIZE   500
 struct  utmp ibuf;
 
 #define        USIZE   500
 struct  utmp ibuf;
 
@@ -71,7 +74,7 @@ char **argv;
                fl = 0;
                for (i=0; i<NMAX; i++) {
                        c = ibuf.ut_name[i];
                fl = 0;
                for (i=0; i<NMAX; i++) {
                        c = ibuf.ut_name[i];
-                       if(isdigit(c) || isalpha(c)) {
+                       if (isprint(c) && c != ' ') {
                                if (fl)
                                        goto skip;
                                continue;
                                if (fl)
                                        goto skip;
                                continue;
@@ -103,7 +106,7 @@ loop()
                dtime = ibuf.ut_time;
                return;
        }
                dtime = ibuf.ut_time;
                return;
        }
-       if(ibuf.ut_line[0] == '}') {
+       if(ibuf.ut_line[0] == '{') {
                if(dtime == 0)
                        return;
                for(tp = tbuf; tp < &tbuf[TSIZE]; tp++)
                if(dtime == 0)
                        return;
                for(tp = tbuf; tp < &tbuf[TSIZE]; tp++)
@@ -128,12 +131,31 @@ loop()
                upall(0);
                return;
        }
                upall(0);
                return;
        }
+       /*
        if (ibuf.ut_line[0]=='t')
                i = (ibuf.ut_line[3]-'0')*10 + (ibuf.ut_line[4]-'0');
        else
                i = TSIZE-1;
        if (i<0 || i>=TSIZE)
                i = TSIZE-1;
        if (ibuf.ut_line[0]=='t')
                i = (ibuf.ut_line[3]-'0')*10 + (ibuf.ut_line[4]-'0');
        else
                i = TSIZE-1;
        if (i<0 || i>=TSIZE)
                i = TSIZE-1;
+       */
+
+       /*
+        * Correction contributed by Phyllis Kantar @ Rand-unix
+        *
+        * Fixes long standing problem with tty names other than 00-99
+        */
+       if (ibuf.ut_line[0]=='t') {
+               i = (ibuf.ut_line[3]-'0');
+               if(ibuf.ut_line[4])
+                       i = i*79 + (ibuf.ut_line[4]-'0');
+       } else
+               i = TSIZE-1;
+       if (i<0 || i>=TSIZE) {
+               i = TSIZE-1;
+               printf("ac: Bad tty name: %s\n", ibuf.ut_line);
+       }
+
        tp = &tbuf[i];
        update(tp, 0);
 }
        tp = &tbuf[i];
        update(tp, 0);
 }
@@ -182,7 +204,7 @@ struct tbuf *tp;
                t = ibuf.ut_time;
        if (tp->userp) {
                t1 = t - tp->ttime;
                t = ibuf.ut_time;
        if (tp->userp) {
                t1 = t - tp->ttime;
-               if (t1>0 && t1 < 1.5*day)
+               if (t1 > 0)
                        tp->userp->utime += t1;
        }
        tp->ttime = t;
                        tp->userp->utime += t1;
        }
        tp->ttime = t;
@@ -215,7 +237,7 @@ among(i)
                p = pptr[j];
                for (k=0; k<NMAX; k++) {
                        if (*p == ubuf[i].uname[k]) {
                p = pptr[j];
                for (k=0; k<NMAX; k++) {
                        if (*p == ubuf[i].uname[k]) {
-                               if (*p++ == '\0')
+                               if (*p++ == '\0' || k == NMAX-1)
                                        return(1);
                        } else
                                break;
                                        return(1);
                        } else
                                break;