13e12c5d1SDavid du Colombier /* 23e12c5d1SDavid du Colombier * pANS stdio -- sclose 33e12c5d1SDavid du Colombier */ 43e12c5d1SDavid du Colombier #include "iolib.h" 53e12c5d1SDavid du Colombier #include <stdlib.h> 67dd7cddfSDavid du Colombier _IO_sclose(FILE * f)77dd7cddfSDavid du Colombierchar *_IO_sclose(FILE *f){ 83e12c5d1SDavid du Colombier switch(f->state){ 93e12c5d1SDavid du Colombier default: /* ERR CLOSED */ 103e12c5d1SDavid du Colombier if(f->buf && f->flags&BALLOC) 113e12c5d1SDavid du Colombier free(f->buf); 12*316a47aaSDavid du Colombier f->state=CLOSED; 133e12c5d1SDavid du Colombier f->flags=0; 143e12c5d1SDavid du Colombier return NULL; 153e12c5d1SDavid du Colombier case OPEN: 163e12c5d1SDavid du Colombier f->buf=malloc(1); 173e12c5d1SDavid du Colombier f->buf[0]='\0'; 183e12c5d1SDavid du Colombier break; 193e12c5d1SDavid du Colombier case RD: 203e12c5d1SDavid du Colombier case END: 213e12c5d1SDavid du Colombier f->flags=0; 223e12c5d1SDavid du Colombier break; 233e12c5d1SDavid du Colombier case RDWR: 243e12c5d1SDavid du Colombier case WR: 253e12c5d1SDavid du Colombier if(f->wp==f->rp){ 263e12c5d1SDavid du Colombier if(f->flags&BALLOC) 273e12c5d1SDavid du Colombier f->buf=realloc(f->buf, f->bufl+1); 283e12c5d1SDavid du Colombier if(f->buf==NULL) return NULL; 293e12c5d1SDavid du Colombier } 303e12c5d1SDavid du Colombier *f->wp='\0'; 313e12c5d1SDavid du Colombier f->flags=0; 323e12c5d1SDavid du Colombier break; 333e12c5d1SDavid du Colombier } 343e12c5d1SDavid du Colombier f->state=CLOSED; 353e12c5d1SDavid du Colombier f->flags=0; 363e12c5d1SDavid du Colombier return f->buf; 373e12c5d1SDavid du Colombier } 38