1*219b2ee8SDavid du Colombier #define _BSDTIME_EXTENSION 2*219b2ee8SDavid du Colombier #include "lib.h" 3*219b2ee8SDavid du Colombier #include <sys/stat.h> 4*219b2ee8SDavid du Colombier #include <stdlib.h> 5*219b2ee8SDavid du Colombier 6*219b2ee8SDavid du Colombier Fdinfo _fdinfo[OPEN_MAX]; 7*219b2ee8SDavid du Colombier 8*219b2ee8SDavid du Colombier /* 9*219b2ee8SDavid du Colombier called from _envsetup, either with the value of the environment 10*219b2ee8SDavid du Colombier variable _fdinfo (from s to se-1), or with s==0 if there was no _fdinfo 11*219b2ee8SDavid du Colombier */ 12*219b2ee8SDavid du Colombier void 13*219b2ee8SDavid du Colombier _fdinit(char *s, char *se) 14*219b2ee8SDavid du Colombier { 15*219b2ee8SDavid du Colombier int i; 16*219b2ee8SDavid du Colombier Fdinfo *fi; 17*219b2ee8SDavid du Colombier unsigned long fd, fl, ofl; 18*219b2ee8SDavid du Colombier char *e; 19*219b2ee8SDavid du Colombier struct stat sbuf; 20*219b2ee8SDavid du Colombier 21*219b2ee8SDavid du Colombier if(s){ 22*219b2ee8SDavid du Colombier while(s < se){ 23*219b2ee8SDavid du Colombier fd = strtoul(s, &e, 10); 24*219b2ee8SDavid du Colombier if(s == e) 25*219b2ee8SDavid du Colombier break; 26*219b2ee8SDavid du Colombier s = e; 27*219b2ee8SDavid du Colombier fl = strtoul(s, &e, 10); 28*219b2ee8SDavid du Colombier if(s == e) 29*219b2ee8SDavid du Colombier break; 30*219b2ee8SDavid du Colombier s = e; 31*219b2ee8SDavid du Colombier ofl = strtoul(s, &e, 10); 32*219b2ee8SDavid du Colombier if(s == e) 33*219b2ee8SDavid du Colombier break; 34*219b2ee8SDavid du Colombier s = e; 35*219b2ee8SDavid du Colombier if(fd < OPEN_MAX){ 36*219b2ee8SDavid du Colombier fi = &_fdinfo[fd]; 37*219b2ee8SDavid du Colombier fi->flags = fl; 38*219b2ee8SDavid du Colombier fi->oflags = ofl; 39*219b2ee8SDavid du Colombier /* hack, until all posix apps recompiled: */ 40*219b2ee8SDavid du Colombier if(_isatty(fd)) 41*219b2ee8SDavid du Colombier fi->flags |= FD_ISTTY; 42*219b2ee8SDavid du Colombier } 43*219b2ee8SDavid du Colombier } 44*219b2ee8SDavid du Colombier } else { 45*219b2ee8SDavid du Colombier for(i = 0; i <= 2; i++) { 46*219b2ee8SDavid du Colombier fi = &_fdinfo[i]; 47*219b2ee8SDavid du Colombier fi->flags = FD_ISOPEN; 48*219b2ee8SDavid du Colombier fi->oflags = (i == 0)? O_RDONLY : O_WRONLY; 49*219b2ee8SDavid du Colombier if(_isatty(i)) 50*219b2ee8SDavid du Colombier fi->flags |= FD_ISTTY; 51*219b2ee8SDavid du Colombier } 52*219b2ee8SDavid du Colombier } 53*219b2ee8SDavid du Colombier for(i = 0; i < OPEN_MAX; i++) { 54*219b2ee8SDavid du Colombier fi = &_fdinfo[i]; 55*219b2ee8SDavid du Colombier if(fi->flags&FD_ISOPEN){ 56*219b2ee8SDavid du Colombier if(fstat(i, &sbuf) >= 0) { 57*219b2ee8SDavid du Colombier fi->uid = sbuf.st_uid; 58*219b2ee8SDavid du Colombier fi->gid = sbuf.st_gid; 59*219b2ee8SDavid du Colombier } 60*219b2ee8SDavid du Colombier } 61*219b2ee8SDavid du Colombier } 62*219b2ee8SDavid du Colombier } 63*219b2ee8SDavid du Colombier 64