aboutsummaryrefslogtreecommitdiff
path: root/libc/upstream-openbsd/lib/libc/stdio/fvwrite.c
diff options
context:
space:
mode:
Diffstat (limited to 'libc/upstream-openbsd/lib/libc/stdio/fvwrite.c')
-rw-r--r--libc/upstream-openbsd/lib/libc/stdio/fvwrite.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/libc/upstream-openbsd/lib/libc/stdio/fvwrite.c b/libc/upstream-openbsd/lib/libc/stdio/fvwrite.c
index ba58f9de0..1088991fd 100644
--- a/libc/upstream-openbsd/lib/libc/stdio/fvwrite.c
+++ b/libc/upstream-openbsd/lib/libc/stdio/fvwrite.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fvwrite.c,v 1.20 2017/03/17 16:06:33 millert Exp $ */
+/* $OpenBSD: fvwrite.c,v 1.17 2009/11/09 00:18:27 kurt Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
@@ -35,7 +35,6 @@
#include <stdlib.h>
#include <string.h>
#include <errno.h>
-#include <unistd.h>
#include "local.h"
#include "fvwrite.h"
@@ -64,7 +63,7 @@ __sfvwrite(FILE *fp, struct __suio *uio)
}
#define MIN(a, b) ((a) < (b) ? (a) : (b))
-#define COPY(n) (void)memcpy(fp->_p, p, n)
+#define COPY(n) (void)memcpy((void *)fp->_p, (void *)p, (size_t)(n))
iov = uio->uio_iov;
p = iov->iov_base;
@@ -106,14 +105,15 @@ __sfvwrite(FILE *fp, struct __suio *uio)
if ((fp->_flags & (__SALC | __SSTR)) ==
(__SALC | __SSTR) && fp->_w < len) {
size_t blen = fp->_p - fp->_bf._base;
- int pgmsk = getpagesize() - 1;
unsigned char *_base;
int _size;
- /* Round up to nearest page. */
- _size = ((blen + len + 1 + pgmsk) & ~pgmsk) - 1;
- _base = recallocarray(fp->_bf._base,
- fp->_bf._size + 1, _size + 1, 1);
+ /* Allocate space exponentially. */
+ _size = fp->_bf._size;
+ do {
+ _size = (_size << 1) + 1;
+ } while (_size < blen + len);
+ _base = realloc(fp->_bf._base, _size + 1);
if (_base == NULL)
goto err;
fp->_w += _size - fp->_bf._size;
@@ -164,7 +164,7 @@ __sfvwrite(FILE *fp, struct __suio *uio)
do {
GETIOV(nlknown = 0);
if (!nlknown) {
- nl = memchr(p, '\n', len);
+ nl = memchr((void *)p, '\n', len);
nldist = nl ? nl + 1 - p : len + 1;
nlknown = 1;
}