BSD 4_1c_2 release
[unix-history] / usr / src / lib / libc / gen / nttyname.c
/* @(#)ttyname.c 4.1 (Berkeley) 12/21/80 */
/*
* ttyname(f): return "/dev/ttyXX" which the the name of the
* tty belonging to file f.
* NULL if it is not a tty
*/
#define NULL 0
#include <sys/types.h>
#include <sys/ndir.h>
#include <sys/stat.h>
static char dev[] = "/dev/";
char *strcpy();
char *strcat();
char *
ttyname(f)
{
struct stat fsb;
struct stat tsb;
register struct direct *db;
register DIR *df;
static char rbuf[32];
if (isatty(f)==0)
return(NULL);
if (fstat(f, &fsb) < 0)
return(NULL);
if ((fsb.st_mode&S_IFMT) != S_IFCHR)
return(NULL);
if ((df = opendir(dev)) == NULL)
return(NULL);
while ((db = readdir(df)) != NULL) {
if (db->d_ino != fsb.st_ino)
continue;
strcpy(rbuf, dev);
strcat(rbuf, db->d_name);
if (stat(rbuf, &tsb) < 0)
continue;
if (tsb.st_dev == fsb.st_dev && tsb.st_ino == fsb.st_ino) {
closedir(df);
return(rbuf);
}
}
closedir(df);
return(NULL);
}