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