OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-src/] [newlib-1.18.0/] [newlib-1.18.0-or32-1.0rc1/] [newlib/] [libc/] [stdio/] [fpurge.c] - Rev 345

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 */
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.