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