* 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
[] = "@(#)wsetup.c 5.2 (Berkeley) %G%";
#endif /* LIBC_SCCS and not lint */
* Various output routines call wsetup to be sure it is safe to write,
* because either _flags does not include __SWR, or _buf is NULL.
* _wsetup returns 0 if OK to write, nonzero otherwise.
/* make sure stdio is set up */
* If we are not writing, we had better be reading and writing.
if ((fp
->_flags
& __SWR
) == 0) {
if ((fp
->_flags
& __SRW
) == 0)
if (fp
->_flags
& __SRD
) {
/* clobber any ungetc data */
fp
->_flags
&= ~(__SRD
|__SEOF
);
* Make a buffer if necessary, then set _w.
if (fp
->_bf
._base
== NULL
)
if (fp
->_flags
& __SLBF
) {
* It is line buffered, so make _lbfsize be -_bufsize
* for the putc() macro. We will change _lbfsize back
* to 0 whenever we turn off __SWR.
fp
->_lbfsize
= -fp
->_bf
._size
;
fp
->_w
= fp
->_flags
& __SNBF
? 0 : fp
->_bf
._size
;