xref: /csrg-svn/lib/libc/gen/ttyslot.c (revision 1995)
1*1995Swnj /* @(#)ttyslot.c	4.1 (Berkeley) 12/21/80 */
2*1995Swnj /*
3*1995Swnj  * Return the number of the slot in the utmp file
4*1995Swnj  * corresponding to the current user: try for file 0, 1, 2.
5*1995Swnj  * Definition is the line number in the /etc/ttys file.
6*1995Swnj  */
7*1995Swnj 
8*1995Swnj 
9*1995Swnj char	*ttyname();
10*1995Swnj char	*getttys();
11*1995Swnj char	*rindex();
12*1995Swnj static	char	ttys[]	= "/etc/ttys";
13*1995Swnj 
14*1995Swnj #define	NULL	0
15*1995Swnj 
16*1995Swnj ttyslot()
17*1995Swnj {
18*1995Swnj 	register char *tp, *p;
19*1995Swnj 	register s, tf;
20*1995Swnj 
21*1995Swnj 	if ((tp=ttyname(0))==NULL && (tp=ttyname(1))==NULL && (tp=ttyname(2))==NULL)
22*1995Swnj 		return(0);
23*1995Swnj 	if ((p = rindex(tp, '/')) == NULL)
24*1995Swnj 		p = tp;
25*1995Swnj 	else
26*1995Swnj 		p++;
27*1995Swnj 	if ((tf=open(ttys, 0)) < 0)
28*1995Swnj 		return(0);
29*1995Swnj 	s = 0;
30*1995Swnj 	while (tp = getttys(tf)) {
31*1995Swnj 		s++;
32*1995Swnj 		if (strcmp(p, tp)==0) {
33*1995Swnj 			close(tf);
34*1995Swnj 			return(s);
35*1995Swnj 		}
36*1995Swnj 	}
37*1995Swnj 	close(tf);
38*1995Swnj 	return(0);
39*1995Swnj }
40*1995Swnj 
41*1995Swnj static char *
42*1995Swnj getttys(f)
43*1995Swnj {
44*1995Swnj 	static char line[32];
45*1995Swnj 	register char *lp;
46*1995Swnj 
47*1995Swnj 	lp = line;
48*1995Swnj 	for (;;) {
49*1995Swnj 		if (read(f, lp, 1) != 1)
50*1995Swnj 			return(NULL);
51*1995Swnj 		if (*lp =='\n') {
52*1995Swnj 			*lp = '\0';
53*1995Swnj 			return(line+2);
54*1995Swnj 		}
55*1995Swnj 		if (lp >= &line[32])
56*1995Swnj 			return(line+2);
57*1995Swnj 		lp++;
58*1995Swnj 	}
59*1995Swnj }
60