Annotation of 3BSD/libc/gen/ttyslot.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.