fclose.c 554 B

12345678910111213141516171819202122232425262728293031
  1. /*
  2. * fclose.c - flush a stream and close the file
  3. */
  4. /* $Id$ */
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include "loc_incl.h"
  8. int _close(int d);
  9. int
  10. fclose(FILE *fp)
  11. {
  12. register int i, retval = 0;
  13. for (i=0; i<FOPEN_MAX; i++)
  14. if (fp == __iotab[i]) {
  15. __iotab[i] = 0;
  16. break;
  17. }
  18. if (i >= FOPEN_MAX)
  19. return EOF;
  20. if (fflush(fp)) retval = EOF;
  21. if (_close(fileno(fp))) retval = EOF;
  22. if ( io_testflag(fp,_IOMYBUF) && fp->_buf )
  23. free((void *)fp->_buf);
  24. if (fp != stdin && fp != stdout && fp != stderr)
  25. free((void *)fp);
  26. return retval;
  27. }