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