xref: /plan9-contrib/sys/src/ape/lib/ap/stdio/sclose.c (revision 22df390c30710ddd2119f3e7bb6c92dc399cabb9)
1 /*
2  * pANS stdio -- sclose
3  */
4 #include "iolib.h"
5 
_IO_sclose(FILE * f)6 char *_IO_sclose(FILE *f){
7 	switch(f->state){
8 	default:	/* ERR CLOSED */
9 		if(f->buf && f->flags&BALLOC)
10 			free(f->buf);
11 		f->state=CLOSED;
12 		f->flags=0;
13 		return NULL;
14 	case OPEN:
15 		f->buf=malloc(1);
16 		f->buf[0]='\0';
17 		break;
18 	case RD:
19 	case END:
20 		f->flags=0;
21 		break;
22 	case RDWR:
23 	case WR:
24 		if(f->wp==f->rp){
25 			if(f->flags&BALLOC)
26 				f->buf=realloc(f->buf, f->bufl+1);
27 			if(f->buf==NULL) return NULL;
28 		}
29 		*f->wp='\0';
30 		f->flags=0;
31 		break;
32 	}
33 	f->state=CLOSED;
34 	f->flags=0;
35 	return (char *)f->buf;
36 }
37