Annotation of 42BSD/lib/libc/gen/ttyname.c, revision 1.1.1.1

1.1       root        1: /* @(#)ttyname.c       4.3 (Berkeley) 5/7/82 */
                      2: /*
                      3:  * ttyname(f): return "/dev/ttyXX" which the the name of the
                      4:  * tty belonging to file f.
                      5:  *  NULL if it is not a tty
                      6:  */
                      7: 
                      8: #define        NULL    0
                      9: #include <sys/param.h>
                     10: #include <sys/dir.h>
                     11: #include <sys/stat.h>
                     12: 
                     13: static char    dev[]   = "/dev/";
                     14: char   *strcpy();
                     15: char   *strcat();
                     16: 
                     17: char *
                     18: ttyname(f)
                     19: {
                     20:        struct stat fsb;
                     21:        struct stat tsb;
                     22:        register struct direct *db;
                     23:        register DIR *df;
                     24:        static char rbuf[32];
                     25: 
                     26:        if (isatty(f)==0)
                     27:                return(NULL);
                     28:        if (fstat(f, &fsb) < 0)
                     29:                return(NULL);
                     30:        if ((fsb.st_mode&S_IFMT) != S_IFCHR)
                     31:                return(NULL);
                     32:        if ((df = opendir(dev)) == NULL)
                     33:                return(NULL);
                     34:        while ((db = readdir(df)) != NULL) {
                     35:                if (db->d_ino != fsb.st_ino)
                     36:                        continue;
                     37:                strcpy(rbuf, dev);
                     38:                strcat(rbuf, db->d_name);
                     39:                if (stat(rbuf, &tsb) < 0)
                     40:                        continue;
                     41:                if (tsb.st_dev == fsb.st_dev && tsb.st_ino == fsb.st_ino) {
                     42:                        closedir(df);
                     43:                        return(rbuf);
                     44:                }
                     45:        }
                     46:        closedir(df);
                     47:        return(NULL);
                     48: }

unix.superglobalmegacorp.com

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