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