URL
https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk
Subversion Repositories openrisc_me
[/] [openrisc/] [trunk/] [gnu-src/] [newlib-1.18.0/] [newlib/] [libc/] [stdio/] [fpurge.c] - Rev 207
Compare with Previous | Blame | View Log
/* Copyright (C) 2009 Eric Blake * Permission to use, copy, modify, and distribute this software * is freely granted, provided that this notice is preserved. */ /* FUNCTION <<fpurge>>---discard pending file I/O INDEX fpurge INDEX _fpurge_r ANSI_SYNOPSIS #include <stdio.h> int fpurge(FILE *<[fp]>); int _fpurge_r(struct _reent *<[reent]>, FILE *<[fp]>); DESCRIPTION Use <<fpurge>> to clear all buffers of the given stream. For output streams, this discards data not yet written to disk. For input streams, this discards any data from <<ungetc>> and any data retrieved from disk but not yet read via <<getc>>. This is more severe than <<fflush>>, and generally is only needed when manually altering the underlying file descriptor of a stream. The alternate function <<_fpurge_r>> is a reentrant version, where the extra argument <[reent]> is a pointer to a reentrancy structure, and <[fp]> must not be NULL. RETURNS <<fpurge>> returns <<0>> unless <[fp]> is not valid, in which case it returns <<EOF>> and sets <<errno>>. PORTABILITY These functions are not portable to any standard. No supporting OS subroutines are required. */ #include <_ansi.h> #include <stdio.h> #include <errno.h> #include "local.h" /* Discard I/O from a single file. */ int _DEFUN(_fpurge_r, (ptr, fp), struct _reent *ptr _AND register FILE * fp) { int t; CHECK_INIT (ptr, fp); _flockfile (fp); t = fp->_flags; if (!t) { ptr->_errno = EBADF; _funlockfile (fp); return EOF; } fp->_p = fp->_bf._base; if ((t & __SWR) == 0) { fp->_r = 0; if (HASUB (fp)) FREEUB (ptr, fp); } else fp->_w = t & (__SLBF | __SNBF) ? 0 : fp->_bf._size; _funlockfile (fp); return 0; } #ifndef _REENT_ONLY int _DEFUN(fpurge, (fp), register FILE * fp) { return _fpurge_r (_REENT, fp); } #endif /* _REENT_ONLY */