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