* Copyright (c) 1990 The Regents of the University of California.
* This code is derived from software contributed to Berkeley by
* %sccs.include.redist.c%
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid
[] = "@(#)refill.c 5.2 (Berkeley) %G%";
#endif /* LIBC_SCCS and not lint */
if ((fp
->_flags
& (__SLBF
|__SWR
)) == __SLBF
|__SWR
)
* Return EOF on eof or error, 0 otherwise.
/* make sure stdio is set up */
fp
->_r
= 0; /* largely a convenience for callers */
/* SysV does not make this test; take it out for compatibility */
/* if not already reading, have to be reading and writing */
if ((fp
->_flags
& __SRD
) == 0) {
if ((fp
->_flags
& __SRW
) == 0) {
if (fp
->_flags
& __SWR
) {
* We were reading. If there is an ungetc buffer,
* we must have been reading from that. Drop it,
* restoring the previous buffer (if any). If there
* is anything in that buffer, return.
if ((fp
->_r
= fp
->_ur
) != 0) {
if (fp
->_bf
._base
== NULL
)
* Before reading from a line buffered or unbuffered file,
* flush all line buffered output files, per the ANSI C
if (fp
->_flags
& (__SLBF
|__SNBF
))
fp
->_r
= (*fp
->_read
)(fp
->_cookie
, (char *)fp
->_p
, fp
->_bf
._size
);
fp
->_flags
&= ~__SMOD
; /* buffer contents are again pristine */