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