Research V7 development
[unix-history] / usr / src / cmd / who.c
CommitLineData
db87b8c5
DR
1/*
2 * who
3 */
4
5#include <stdio.h>
6#include <utmp.h>
7#include <pwd.h>
8struct utmp utmp;
9struct passwd *pw;
10struct passwd *getpwuid();
11
12char *ttyname(), *rindex(), *ctime(), *strcpy(), *index();
13main(argc, argv)
14char **argv;
15{
16 register char *tp, *s;
17 register FILE *fi;
18
19 s = "/etc/utmp";
20 if(argc == 2)
21 s = argv[1];
22 if (argc==3) {
23 tp = ttyname(0);
24 if (tp)
25 tp = index(tp+1, '/') + 1;
26 else { /* no tty - use best guess from passwd file */
27 pw = getpwuid(getuid());
28 strcpy(utmp.ut_name, pw?pw->pw_name: "?");
29 strcpy(utmp.ut_line, "tty??");
30 time(&utmp.ut_time);
31 putline();
32 exit(0);
33 }
34 }
35 if ((fi = fopen(s, "r")) == NULL) {
36 puts("who: cannot open utmp");
37 exit(1);
38 }
39 while (fread((char *)&utmp, sizeof(utmp), 1, fi) == 1) {
40 if(argc==3) {
41 if (strcmp(utmp.ut_line, tp))
42 continue;
43#ifdef interdata
44 printf("(Interdata) ");
45#endif
46 putline();
47 exit(0);
48 }
49 if(utmp.ut_name[0] == '\0' && argc==1)
50 continue;
51 putline();
52 }
53}
54
55putline()
56{
57 register char *cbuf;
58
59 printf("%-8.8s %-8.8s", utmp.ut_name, utmp.ut_line);
60 cbuf = ctime(&utmp.ut_time);
61 printf("%.12s\n", cbuf+4);
62}