fclose.c 553 B

123456789101112131415161718192021222324252627282930
  1. /*
  2. * fclose.c - flush a stream and close the file
  3. */
  4. /* $Id$ */
  5. #include <stdlib.h>
  6. #include <stdio.h>
  7. #include <unistd.h>
  8. #include "loc_incl.h"
  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. }