diff options
Diffstat (limited to 'libc/upstream-openbsd/lib/libc/stdio/fvwrite.c')
-rw-r--r-- | libc/upstream-openbsd/lib/libc/stdio/fvwrite.c | 18 |
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; } |