#include #include #include #include "fileutil.h" int fflush(FILE *fp) { // TODO: fflush(NULL) should flush "all" files (do we track them?) if(!fp) { errno = EINVAL; return EOF; } if(!fp->buf) return 0; /* In reading mode, reset the file offset */ if(fp->bufdir == __FILE_BUF_READ && fp->bufpos < fp->bufread) { fp->fdpos = fp->fdpos - fp->bufread + fp->bufpos; lseek(fp->fd, fp->fdpos, SEEK_SET); fp->bufpos = 0; fp->bufread = 0; return 0; } /* In writing mode, write pending data */ if(fp->bufdir == __FILE_BUF_WRITE && fp->bufpos > 0) { ssize_t written = __fp_write(fp, fp->buf, fp->bufpos); fp->bufpos = 0; return (written == (ssize_t)fp->bufpos ? 0 : EOF); } return 0; }