fxlibc/src/libc/stdio/fflush.c

34 lines
687 B
C

#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#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;
int rc = 0;
/* In reading mode, reset the file offset */
if(fp->bufmode == __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;
}
/* In writing mode, write pending data */
else if(fp->bufmode == __FILE_BUF_WRITE && fp->bufpos > 0) {
rc = __fp_write(fp, fp->buf, fp->bufpos);
fp->bufpos = 0;
}
return rc;
}