Commit | Line | Data |
---|---|---|
9c79dca0 BJ |
1 | /* |
2 | * who | |
3 | */ | |
4 | ||
5 | #include <stdio.h> | |
6 | #include <utmp.h> | |
7 | #include <pwd.h> | |
8 | struct utmp utmp; | |
9 | struct passwd *pw; | |
10 | struct passwd *getpwuid(); | |
11 | ||
12 | char *ttyname(), *rindex(), *ctime(), *strcpy(); | |
13 | main(argc, argv) | |
14 | char **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 = rindex(tp, '/') + 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 vax | |
44 | printf("(Vax) "); | |
45 | #endif | |
46 | putline(); | |
47 | exit(0); | |
48 | } | |
49 | if(utmp.ut_name[0] == '\0' && argc==1) | |
50 | continue; | |
51 | putline(); | |
52 | } | |
53 | } | |
54 | ||
55 | putline() | |
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 | } |