Commit | Line | Data |
---|---|---|
31cef89c | 1 | static char *sccsid = "@(#)who.c 4.2 (Berkeley) 11/1/80"; |
aba4c79c BJ |
2 | /* |
3 | * who | |
4 | */ | |
5 | ||
6 | #include <stdio.h> | |
7 | #include <utmp.h> | |
8 | #include <pwd.h> | |
751509f1 BJ |
9 | #include <whoami.h> |
10 | #include <ctype.h> | |
aba4c79c BJ |
11 | |
12 | #define NMAX sizeof(utmp.ut_name) | |
13 | #define LMAX sizeof(utmp.ut_line) | |
14 | ||
15 | struct utmp utmp; | |
16 | struct passwd *pw; | |
17 | struct passwd *getpwuid(); | |
18 | ||
19 | char *ttyname(), *rindex(), *ctime(), *strcpy(); | |
20 | main(argc, argv) | |
21 | char **argv; | |
22 | { | |
23 | register char *tp, *s; | |
24 | register FILE *fi; | |
25 | extern char _sobuf[]; | |
26 | ||
27 | setbuf(stdout, _sobuf); | |
28 | s = "/etc/utmp"; | |
29 | if(argc == 2) | |
30 | s = argv[1]; | |
31 | if (argc==3) { | |
32 | tp = ttyname(0); | |
33 | if (tp) | |
34 | tp = rindex(tp, '/') + 1; | |
35 | else { /* no tty - use best guess from passwd file */ | |
36 | pw = getpwuid(getuid()); | |
37 | strcpy(utmp.ut_name, pw?pw->pw_name: "?"); | |
38 | strcpy(utmp.ut_line, "tty??"); | |
39 | time(&utmp.ut_time); | |
40 | putline(); | |
41 | exit(0); | |
42 | } | |
43 | } | |
44 | if ((fi = fopen(s, "r")) == NULL) { | |
45 | puts("who: cannot open utmp"); | |
46 | exit(1); | |
47 | } | |
48 | while (fread((char *)&utmp, sizeof(utmp), 1, fi) == 1) { | |
49 | if(argc==3) { | |
751509f1 | 50 | static char myname[]=sysname; |
aba4c79c BJ |
51 | if (strcmp(utmp.ut_line, tp)) |
52 | continue; | |
751509f1 BJ |
53 | if (islower(*myname)) |
54 | *myname = toupper(*myname); | |
55 | printf("(%s) ",myname); | |
aba4c79c BJ |
56 | putline(); |
57 | exit(0); | |
58 | } | |
59 | if(utmp.ut_name[0] == '\0' && argc==1) | |
60 | continue; | |
61 | putline(); | |
62 | } | |
63 | } | |
64 | ||
65 | putline() | |
66 | { | |
67 | register char *cbuf; | |
68 | ||
69 | printf("%-*.*s %-*.*s", NMAX, NMAX, utmp.ut_name, LMAX, LMAX, utmp.ut_line); | |
70 | cbuf = ctime(&utmp.ut_time); | |
71 | printf("%.12s\n", cbuf+4); | |
72 | } |