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