13e12c5d1SDavid du Colombier #include "lib.h" 23e12c5d1SDavid du Colombier #include <string.h> 33e12c5d1SDavid du Colombier #include <sys/types.h> 43e12c5d1SDavid du Colombier #include <sys/stat.h> 53e12c5d1SDavid du Colombier #include "sys9.h" 63e12c5d1SDavid du Colombier #include "dir.h" 73e12c5d1SDavid du Colombier 83e12c5d1SDavid du Colombier int 9*219b2ee8SDavid du Colombier _isatty(int fd) 103e12c5d1SDavid du Colombier { 113e12c5d1SDavid du Colombier int t; 123e12c5d1SDavid du Colombier Dir d1, d2; 133e12c5d1SDavid du Colombier char cd[DIRLEN]; 143e12c5d1SDavid du Colombier char buf[5+NAMELEN]; 153e12c5d1SDavid du Colombier 163e12c5d1SDavid du Colombier if(_FSTAT(fd, cd) < 0) 173e12c5d1SDavid du Colombier return 0; 183e12c5d1SDavid du Colombier convM2D(cd, &d1); 19*219b2ee8SDavid du Colombier if(strncmp(d1.name, "ptty", 4)==0) 20*219b2ee8SDavid du Colombier return 1; 213e12c5d1SDavid du Colombier if(_STAT("/dev/cons", cd) < 0) 223e12c5d1SDavid du Colombier return 0; 233e12c5d1SDavid du Colombier convM2D(cd, &d2); 243e12c5d1SDavid du Colombier 253e12c5d1SDavid du Colombier /* 263e12c5d1SDavid du Colombier * If we came in through con, /dev/cons is probably #d/0, which 273e12c5d1SDavid du Colombier * won't match stdin. Opening #d/0 and fstating it gives the 283e12c5d1SDavid du Colombier * values of the underlying channel 293e12c5d1SDavid du Colombier */ 303e12c5d1SDavid du Colombier 313e12c5d1SDavid du Colombier if(d2.type == 'd'){ 323e12c5d1SDavid du Colombier strcpy(buf, "#d/"); 333e12c5d1SDavid du Colombier strcpy(buf+3, d2.name); 343e12c5d1SDavid du Colombier if((t = _OPEN(buf, 0)) < 0) 353e12c5d1SDavid du Colombier return 0; 363e12c5d1SDavid du Colombier if(_FSTAT(t, cd) < 0){ 373e12c5d1SDavid du Colombier _CLOSE(t); 383e12c5d1SDavid du Colombier return 0; 393e12c5d1SDavid du Colombier } 403e12c5d1SDavid du Colombier _CLOSE(t); 413e12c5d1SDavid du Colombier convM2D(cd, &d2); 423e12c5d1SDavid du Colombier } 433e12c5d1SDavid du Colombier return (d1.type == d2.type) && (d1.dev == d2.dev); 443e12c5d1SDavid du Colombier } 45*219b2ee8SDavid du Colombier 46*219b2ee8SDavid du Colombier /* The FD_ISTTY flag is set via _isatty in _fdsetup or open */ 47*219b2ee8SDavid du Colombier int 48*219b2ee8SDavid du Colombier isatty(fd) 49*219b2ee8SDavid du Colombier { 50*219b2ee8SDavid du Colombier if(_fdinfo[fd].flags&FD_ISTTY) 51*219b2ee8SDavid du Colombier return 1; 52*219b2ee8SDavid du Colombier else 53*219b2ee8SDavid du Colombier return 0; 54*219b2ee8SDavid du Colombier } 55