#ifndef lint
-static char *sccsid = "@(#)lastcomm.c 4.7 (Berkeley) %G%";
+static char *sccsid = "@(#)lastcomm.c 4.14 (Berkeley) %G%";
#endif
/*
exit(1);
}
fstat(fd, &sb);
- for (bn = btodb(sb.st_size) - 1; bn >= 0; bn--) {
- lseek(fd, bn * DEV_BSIZE, L_SET);
+ for (bn = btodb(sb.st_size); bn >= 0; bn--) {
+ lseek(fd, dbtob(bn), L_SET);
cc = read(fd, buf, DEV_BSIZE);
if (cc < 0) {
perror("read");
acp = buf + (cc / sizeof (buf[0])) - 1;
for (; acp >= buf; acp--) {
register char *cp;
- time_t x =
- expand(acp->ac_utime) + expand(acp->ac_stime);
+ time_t x;
- acp->ac_comm[10] = '\0';
- if (*acp->ac_comm == '\0')
+ if (acp->ac_comm[0] == '\0')
strcpy(acp->ac_comm, "?");
- for (cp = acp->ac_comm; *cp; cp++)
- if (iscntrl(*cp))
+ for (cp = &acp->ac_comm[0];
+ cp < &acp->ac_comm[fldsiz(acct, ac_comm)] && *cp;
+ cp++)
+ if (!isascii(*cp) || iscntrl(*cp))
*cp = '?';
- if (!ok(argc, argv, acp) && argc != 1)
+ if (argc > 1 && !ok(argc, argv, acp))
continue;
- printf("%-*s %s %-*s %-*s %4d sec%s %.16s\n",
+ x = expand(acp->ac_utime) + expand(acp->ac_stime);
+ printf("%-*s %s %-*s %-*s %6.2f secs %.16s\n",
fldsiz(acct, ac_comm), acp->ac_comm,
flagbits(acp->ac_flag),
fldsiz(utmp, ut_name), getname(acp->ac_uid),
fldsiz(utmp, ut_line), getdev(acp->ac_tty),
- x, x > 1 || x == 0 ? "s" : " ",
- ctime(&acp->ac_btime));
+ x / (double)AHZ, ctime(&acp->ac_btime));
}
}
}
for (j = 1; j < argc; j++)
if (strcmp(getname(acp->ac_uid), argv[j]) &&
strcmp(getdev(acp->ac_tty), argv[j]) &&
- strcmp(acp->ac_comm, argv[j]))
+ strncmp(acp->ac_comm, argv[j], fldsiz(acct, ac_comm)))
break;
return (j == argc);
}
if (pw->pw_uid != uid)
continue;
outrangeuid = pw->pw_uid;
- strncpy(outrangename, pw->pw_name, NUID);
+ strncpy(outrangename, pw->pw_name, NMAX);
endpwent();
return (outrangename);
}
if (pw->pw_uid < 0 || pw->pw_uid >= NUID) {
if (pw->pw_uid == uid) {
outrangeuid = pw->pw_uid;
- strncpy(outrangename, pw->pw_name, NUID);
+ strncpy(outrangename, pw->pw_name, NMAX);
return (outrangename);
}
continue;
hashtab = (struct devhash *)malloc(NDEVS * sizeof(struct devhash));
if (hashtab == (struct devhash *)0) {
fprintf(stderr, "No mem for dev table\n");
+ closedir(fd);
return;
}
while (dp = readdir(fd)) {
char name[fldsiz(devhash, dev_name) + 6];
static dev_t lastdev = (dev_t) -1;
static char *lastname;
- int init = 0;
+ static int init = 0;
if (dev == NODEV)
return ("__");