Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#include "lib.h"
2
#include <stdlib.h>
3
#include <unistd.h>
4
#include <errno.h>
5
#include "sys9.h"
6
 
7
int
8
close(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
}