123456789101112131415161718192021222324252627282930 |
- /*
- * fclose.c - flush a stream and close the file
- */
- /* $Id$ */
- #include <stdlib.h>
- #include <stdio.h>
- #include <unistd.h>
- #include "loc_incl.h"
- int
- fclose(FILE *fp)
- {
- register int i, retval = 0;
- for (i=0; i<FOPEN_MAX; i++)
- if (fp == __iotab[i]) {
- __iotab[i] = 0;
- break;
- }
- if (i >= FOPEN_MAX)
- return EOF;
- if (fflush(fp)) retval = EOF;
- if (close(fileno(fp))) retval = EOF;
- if ( io_testflag(fp,_IOMYBUF) && fp->_buf )
- free((void *)fp->_buf);
- if (fp != stdin && fp != stdout && fp != stderr)
- free((void *)fp);
- return retval;
- }
|