fclose.c - scc - simple c99 compiler
 (HTM) git clone git://git.simple-cc.org/scc
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
 (DIR) README
 (DIR) LICENSE
       ---
       fclose.c (578B)
       ---
            1 #include <stdlib.h>
            2 #include <stdio.h>
            3 
            4 #include "../libc.h"
            5 #include "../syscall.h"
            6 
            7 #undef fclose
            8 
            9 int
           10 fclose(FILE *fp)
           11 {
           12         int r = EOF;
           13 
           14         if ((fp->flags & _IOSTRG) == 0 &&
           15             fp->flags & (_IOWRITE | _IOREAD | _IORW)) {
           16                 r = 0;
           17                 if (_flsbuf(fp) == EOF)
           18                         r = EOF;
           19                 if (_close(fp->fd) < 0)
           20                         r = EOF;
           21         }
           22 
           23         if (fp->flags & _IOALLOC) {
           24                 free(fp->buf);
           25                 fp->rp = fp->wp = fp->lp = fp->buf = NULL;
           26         }
           27 
           28         fp->flags &= ~(_IOWRITE | _IOREAD | _IORW |
           29                        _IOERR | _IOEOF |
           30                        _IOALLOC |
           31                        _IOTXT |
           32                        _IOSTRG);
           33 
           34         return r;
           35 }