xref: /original-bsd/usr.bin/users/users.c (revision 1e7fda44)
1 static char *sccsid = "@(#)users.c	4.1 (Berkeley) 10/01/80";
2 /*
3  * users
4  */
5 char	*malloc();
6 
7 #include <stdio.h>
8 #include <utmp.h>
9 
10 #define NMAX sizeof(utmp.ut_name)
11 #define LMAX sizeof(utmp.ut_line)
12 
13 struct utmp utmp;
14 
15 main(argc, argv)
16 char **argv;
17 {
18 	register char *tp, *s;
19 	register FILE *fi;
20 
21 	s = "/etc/utmp";
22 	if(argc == 2)
23 		s = argv[1];
24 	if ((fi = fopen(s, "r")) == NULL) {
25 		puts("who: cannot open utmp");
26 		exit(1);
27 	}
28 	while (fread((char *)&utmp, sizeof(utmp), 1, fi) == 1) {
29 		if(utmp.ut_name[0] == '\0')
30 			continue;
31 		putline();
32 	}
33 	summary();
34 }
35 
36 char	*names[128];
37 char	**namp = names;
38 putline()
39 {
40 	char temp[NMAX+1];
41 	strncpy(temp, utmp.ut_name, NMAX);
42 	temp[NMAX] = 0;
43 	*namp = malloc(strlen(temp) + 1);
44 	strcpy(*namp++, temp);
45 }
46 
47 scmp(p, q)
48 char **p, **q;
49 {
50 	return(strcmp(*p, *q));
51 }
52 summary()
53 {
54 	register char **p;
55 
56 	qsort(names, namp - names, sizeof names[0], scmp);
57 	for (p=names; p < namp; p++) {
58 		if (p != names)
59 			printf(" ");
60 		printf("%s", *p);
61 	}
62 	printf("\n");
63 }
64