sclose.c 575 B

12345678910111213141516171819202122232425262728293031323334353637
  1. /*
  2. * pANS stdio -- sclose
  3. */
  4. #include "iolib.h"
  5. #include <stdlib.h>
  6. char *_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 f->buf;
  36. }