13e12c5d1SDavid du Colombier #include "lib.h" 23e12c5d1SDavid du Colombier #include <stdlib.h> 33e12c5d1SDavid du Colombier #include <unistd.h> 43e12c5d1SDavid du Colombier #include <errno.h> 53e12c5d1SDavid du Colombier #include "sys9.h" 63e12c5d1SDavid du Colombier 73e12c5d1SDavid du Colombier int close(int d)83e12c5d1SDavid du Colombierclose(int d) 93e12c5d1SDavid du Colombier { 103e12c5d1SDavid du Colombier int n; 113e12c5d1SDavid du Colombier Fdinfo *f; 123e12c5d1SDavid du Colombier 133e12c5d1SDavid du Colombier n = -1; 143e12c5d1SDavid du Colombier f = &_fdinfo[d]; 153e12c5d1SDavid du Colombier if(d<0 || d>=OPEN_MAX || !(f->flags&FD_ISOPEN)) 163e12c5d1SDavid du Colombier errno = EBADF; 173e12c5d1SDavid du Colombier else{ 18*219b2ee8SDavid du Colombier if(f->flags&(FD_BUFFERED|FD_BUFFEREDX)) { 193e12c5d1SDavid du Colombier if(f->flags&FD_BUFFERED) 20*219b2ee8SDavid du Colombier _closebuf(d); 213e12c5d1SDavid du Colombier f->flags &= ~FD_BUFFERED; 22*219b2ee8SDavid du Colombier } 233e12c5d1SDavid du Colombier n = _CLOSE(d); 243e12c5d1SDavid du Colombier if(n < 0) 253e12c5d1SDavid du Colombier _syserrno(); 263e12c5d1SDavid du Colombier _fdinfo[d].flags = 0; 273e12c5d1SDavid du Colombier _fdinfo[d].oflags = 0; 283e12c5d1SDavid du Colombier if(_fdinfo[d].name){ 293e12c5d1SDavid du Colombier free(_fdinfo[d].name); 303e12c5d1SDavid du Colombier _fdinfo[d].name = 0; 313e12c5d1SDavid du Colombier } 323e12c5d1SDavid du Colombier } 333e12c5d1SDavid du Colombier return n; 343e12c5d1SDavid du Colombier } 35