Index: stdio.h
===================================================================
RCS file: /cvsroot/src/include/stdio.h,v
retrieving revision 1.80
diff -u -p -u -r1.80 stdio.h
--- stdio.h	22 Jan 2012 18:36:16 -0000	1.80
+++ stdio.h	16 Mar 2012 19:15:25 -0000
@@ -121,9 +121,9 @@ typedef	struct __sFILE {
 	/* operations */
 	void	*_cookie;	/* cookie passed to io functions */
 	int	(*_close)(void *);
-	int	(*_read) (void *, char *, int);
+	ssize_t	(*_read) (void *, void *, size_t);
 	__off_t	(*_seek) (void *, __off_t, int);
-	int	(*_write)(void *, const char *, int);
+	ssize_t	(*_write)(void *, const void *, size_t);
 
 	/* file extension */
 	struct	__sbuf _ext;
@@ -136,8 +136,9 @@ typedef	struct __sFILE {
 	unsigned char _ubuf[3];	/* guarantee an ungetc() buffer */
 	unsigned char _nbuf[1];	/* guarantee a getc() buffer */
 
+	int	(*_flush)(void *);
 	/* Formerly used by fgetln/fgetwln; kept for binary compatibility */
-	struct	__sbuf _lb__unused;
+	char	_lb_unused[sizeof(struct __sbuf) - sizeof(int (*)(void *))];
 
 	/* Unix stdio files get aligned to block boundaries on fseek() */
 	int	_blksize;	/* stat.st_blksize (may be != _bf._size) */
@@ -427,13 +428,21 @@ __END_DECLS
  */
 __BEGIN_DECLS
 FILE	*funopen(const void *,
-		int (*)(void *, char *, int),
-		int (*)(void *, const char *, int),
-		off_t (*)(void *, off_t, int),
-		int (*)(void *));
+    int (*)(void *, char *, int),
+    int (*)(void *, const char *, int),
+    off_t (*)(void *, off_t, int),
+    int (*)(void *));
+FILE	*funopen2(const void *,
+    ssize_t (*)(void *, void *, size_t),
+    ssize_t (*)(void *, const void *, size_t),
+    off_t (*)(void *, off_t, int),
+    int (*)(void *),
+    int (*)(void *));
 __END_DECLS
 #define	fropen(cookie, fn) funopen(cookie, fn, 0, 0, 0)
 #define	fwopen(cookie, fn) funopen(cookie, 0, fn, 0, 0)
+#define	fropen2(cookie, fn) funopen2(cookie, fn, 0, 0, 0, 0)
+#define	fwopen2(cookie, fn) funopen2(cookie, 0, fn, 0, 0, 0)
 #endif /* _NETBSD_SOURCE */
 
 /*