summaryrefslogtreecommitdiff
path: root/lib/libc/stdio/fvwrite.c
diff options
context:
space:
mode:
authorchristos <christos@NetBSD.org>2012-03-27 15:05:42 +0000
committerchristos <christos@NetBSD.org>2012-03-27 15:05:42 +0000
commitbaad00d0c072d37cba2aa3aad2bcbb15c7b00d0e (patch)
tree1ef0b1202c3bc828d646eb3f4204ad1ed3f19ceb /lib/libc/stdio/fvwrite.c
parentbae5d65144ba6010d073c3de6c63a476d6f792cf (diff)
- widen the internal read and write calls to match the syscalls
- add funopen2() which provides access to flush() and the wider calls. - make use of the new flush call in fmemopen()
Diffstat (limited to 'lib/libc/stdio/fvwrite.c')
-rw-r--r--lib/libc/stdio/fvwrite.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/lib/libc/stdio/fvwrite.c b/lib/libc/stdio/fvwrite.c
index 6e31e781186..a2619ac3d0c 100644
--- a/lib/libc/stdio/fvwrite.c
+++ b/lib/libc/stdio/fvwrite.c
@@ -1,4 +1,4 @@
-/* $NetBSD: fvwrite.c,v 1.24 2012/03/15 18:22:30 christos Exp $ */
+/* $NetBSD: fvwrite.c,v 1.25 2012/03/27 15:05:42 christos Exp $ */
/*-
* Copyright (c) 1990, 1993
@@ -37,7 +37,7 @@
#if 0
static char sccsid[] = "@(#)fvwrite.c 8.1 (Berkeley) 6/4/93";
#else
-__RCSID("$NetBSD: fvwrite.c,v 1.24 2012/03/15 18:22:30 christos Exp $");
+__RCSID("$NetBSD: fvwrite.c,v 1.25 2012/03/27 15:05:42 christos Exp $");
#endif
#endif /* LIBC_SCCS and not lint */
@@ -63,14 +63,15 @@ __sfvwrite(FILE *fp, struct __suio *uio)
size_t len;
char *p;
struct __siov *iov;
- int w, s;
+ int s;
+ ssize_t w;
char *nl;
size_t nlknown, nldist;
_DIAGASSERT(fp != NULL);
_DIAGASSERT(uio != NULL);
- if ((int)uio->uio_resid < 0) {
+ if ((ssize_t)uio->uio_resid < 0) {
errno = EINVAL;
return EOF;
}
@@ -102,8 +103,7 @@ __sfvwrite(FILE *fp, struct __suio *uio)
*/
do {
GETIOV(;);
- w = (*fp->_write)(fp->_cookie, p,
- (int)MIN(len, BUFSIZ));
+ w = (*fp->_write)(fp->_cookie, p, MIN(len, BUFSIZ));
if (w <= 0)
goto err;
p += w;
@@ -146,11 +146,11 @@ __sfvwrite(FILE *fp, struct __suio *uio)
w = fp->_w;
if (fp->_flags & __SSTR) {
if (len < (size_t)w)
- w = (int)len;
+ w = len;
COPY(w); /* copy MIN(fp->_w,len), */
- fp->_w -= w;
+ fp->_w -= (int)w;
fp->_p += w;
- w = (int)len; /* but pretend copied all */
+ w = len; /* but pretend copied all */
} else if (fp->_p > fp->_bf._base && len > (size_t)w) {
/* fill and flush */
COPY(w);
@@ -160,14 +160,14 @@ __sfvwrite(FILE *fp, struct __suio *uio)
goto err;
} else if (len >= (size_t)(w = fp->_bf._size)) {
/* write directly */
- w = (*fp->_write)(fp->_cookie, p, w);
+ w = (*fp->_write)(fp->_cookie, p, (size_t)w);
if (w <= 0)
goto err;
} else {
/* fill and done */
- w = (int)len;
+ w = len;
COPY(w);
- fp->_w -= w;
+ fp->_w -= (int)w;
fp->_p += w;
}
p += w;
@@ -199,13 +199,13 @@ __sfvwrite(FILE *fp, struct __suio *uio)
if (fflush(fp))
goto err;
} else if (s >= (w = fp->_bf._size)) {
- w = (*fp->_write)(fp->_cookie, p, w);
+ w = (*fp->_write)(fp->_cookie, p, (size_t)w);
if (w <= 0)
goto err;
} else {
w = s;
COPY(w);
- fp->_w -= w;
+ fp->_w -= (int)w;
fp->_p += w;
}
if ((nldist -= w) == 0) {