1 #include "lib.h" 2 #include <stdlib.h> 3 #include <unistd.h> 4 #include <errno.h> 5 #include "sys9.h" 6 7 int close(int d)8close(int d) 9 { 10 int n; 11 Fdinfo *f; 12 13 n = -1; 14 f = &_fdinfo[d]; 15 if(d<0 || d>=OPEN_MAX || !(f->flags&FD_ISOPEN)) 16 errno = EBADF; 17 else{ 18 if(f->flags&(FD_BUFFERED|FD_BUFFEREDX)) { 19 if(f->flags&FD_BUFFERED) 20 _closebuf(d); 21 f->flags &= ~FD_BUFFERED; 22 } 23 n = _CLOSE(d); 24 if(n < 0) 25 _syserrno(); 26 _fdinfo[d].flags = 0; 27 _fdinfo[d].oflags = 0; 28 if(_fdinfo[d].name){ 29 free(_fdinfo[d].name); 30 _fdinfo[d].name = 0; 31 } 32 } 33 return n; 34 } 35