summaryrefslogtreecommitdiffstats
path: root/lib/libc/stdio/fvwrite.c
diff options
context:
space:
mode:
authormillert <millert@openbsd.org>1999-08-07 17:35:58 +0000
committermillert <millert@openbsd.org>1999-08-07 17:35:58 +0000
commit160746697ac1f1e9929f1e023c4abd133e54ae37 (patch)
treec1de28041b80f236adc64654d2f6b33575d182a4 /lib/libc/stdio/fvwrite.c
parentsync (diff)
downloadwireguard-openbsd-160746697ac1f1e9929f1e023c4abd133e54ae37.tar.xz
wireguard-openbsd-160746697ac1f1e9929f1e023c4abd133e54ae37.zip
If fread() returns EBADF, also set the error flag; tobez@plab.ku.dk
Diffstat (limited to 'lib/libc/stdio/fvwrite.c')
-rw-r--r--lib/libc/stdio/fvwrite.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/libc/stdio/fvwrite.c b/lib/libc/stdio/fvwrite.c
index ef854a3f9b0..444b33a6d59 100644
--- a/lib/libc/stdio/fvwrite.c
+++ b/lib/libc/stdio/fvwrite.c
@@ -35,7 +35,7 @@
*/
#if defined(LIBC_SCCS) && !defined(lint)
-static char rcsid[] = "$OpenBSD: fvwrite.c,v 1.8 1998/11/20 06:13:26 millert Exp $";
+static char rcsid[] = "$OpenBSD: fvwrite.c,v 1.9 1999/08/07 17:35:58 millert Exp $";
#endif /* LIBC_SCCS and not lint */
#include <stdio.h>
@@ -111,7 +111,9 @@ __sfvwrite(fp, uio)
do {
GETIOV(;);
if ((fp->_flags & (__SALC | __SSTR)) ==
- (__SALC | __SSTR) && fp->_w < len) {
+ (__SALC | __SSTR) && fp->_w < len &&
+ ((fp->_flags & __SAMX) == 0 || fp->_bf._size
+ <= fp->_blksize)) {
size_t blen = fp->_p - fp->_bf._base;
unsigned char *_base;
int _size;
@@ -121,6 +123,9 @@ __sfvwrite(fp, uio)
do {
_size = (_size << 1) + 1;
} while (_size < blen + len);
+ /* Apply maximum if v?asnprintf */
+ if ((fp->_flags & __SAMX))
+ _size = MIN(_size, fp->_blksize);
_base = realloc(fp->_bf._base, _size + 1);
if (_base == NULL)
goto err;