1 /* 2 * pANS stdio -- sclose 3 */ 4 #include "iolib.h" 5 _IO_sclose(FILE * f)6char *_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