date and time created 80/12/21 16:40:26 by wnj
[unix-history] / usr / src / lib / libc / gen / ttyname.c
CommitLineData
b11ade1b
BJ
1/* @(#)ttyname.c 4.1 (Berkeley) %G% */
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/types.h>
10#include <sys/dir.h>
11#include <sys/stat.h>
12
13static char dev[] = "/dev/";
14char *strcpy();
15char *strcat();
16
17char *
18ttyname(f)
19{
20 struct stat fsb;
21 struct stat tsb;
22 struct direct db;
23 static char rbuf[32];
24 register df;
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 = open(dev, 0)) < 0)
33 return(NULL);
34 while (read(df, (char *)&db, sizeof(db)) == sizeof(db)) {
35 if (db.d_ino == 0)
36 continue;
37 if (db.d_ino != fsb.st_ino)
38 continue;
39 strcpy(rbuf, dev);
40 strcat(rbuf, db.d_name);
41 if (stat(rbuf, &tsb) < 0)
42 continue;
43 if (tsb.st_dev==fsb.st_dev && tsb.st_ino==fsb.st_ino) {
44 close(df);
45 return(rbuf);
46 }
47 }
48 close(df);
49 return(NULL);
50}