git: d2c65a1c9486 - stable/14 - fflush: correct buffer handling in __sflush

From: Ed Maste <emaste_at_FreeBSD.org>
Date: Tue, 07 Nov 2023 17:58:59 UTC
The branch stable/14 has been updated by emaste:

URL: https://cgit.FreeBSD.org/src/commit/?id=d2c65a1c948648f11342274029a3f18b90aa58d2

commit d2c65a1c948648f11342274029a3f18b90aa58d2
Author:     Ed Maste <emaste@FreeBSD.org>
AuthorDate: 2023-11-07 14:16:13 +0000
Commit:     Ed Maste <emaste@FreeBSD.org>
CommitDate: 2023-11-07 17:31:34 +0000

    fflush: correct buffer handling in __sflush
    
    Two additional stdio changes followed 86a16ada1ea6 and need to be
    reverted as part of the fflush fix.
    
    This reverts commit 6e13794fbe6e82c21365d0fd66769bf8b19c0197.
    This reverts commit bafaa70b6f9098d83d074968c8e6747ecec1e118.
    
    Fixes: d09a3bf72c0b ("fflush: correct buffer handling in __sflush")
    Reviewed by: markj
    Sponsored by: The FreeBSD Foundation
    Differential Revision: https://reviews.freebsd.org/D42491
    
    (cherry picked from commit 4e0e01bf6511c28212d7dff94fe131a502e13026)
    
    Approved by:    so
---
 lib/libc/stdio/fvwrite.c | 13 ++-----------
 lib/libc/stdio/wbuf.c    | 12 ++----------
 2 files changed, 4 insertions(+), 21 deletions(-)

diff --git a/lib/libc/stdio/fvwrite.c b/lib/libc/stdio/fvwrite.c
index dd170ee3d7dc..acf8f72076cf 100644
--- a/lib/libc/stdio/fvwrite.c
+++ b/lib/libc/stdio/fvwrite.c
@@ -52,7 +52,6 @@ int
 __sfvwrite(FILE *fp, struct __suio *uio)
 {
 	size_t len;
-	unsigned char *old_p;
 	char *p;
 	struct __siov *iov;
 	int w, s;
@@ -136,12 +135,8 @@ __sfvwrite(FILE *fp, struct __suio *uio)
 				COPY(w);
 				/* fp->_w -= w; */ /* unneeded */
 				fp->_p += w;
-				old_p = fp->_p;
-				if (__fflush(fp) == EOF) {
-					if (old_p == fp->_p)
-						fp->_p -= w;
+				if (__fflush(fp))
 					goto err;
-				}
 			} else if (len >= (w = fp->_bf._size)) {
 				/* write directly */
 				w = _swrite(fp, p, w);
@@ -180,12 +175,8 @@ __sfvwrite(FILE *fp, struct __suio *uio)
 				COPY(w);
 				/* fp->_w -= w; */
 				fp->_p += w;
-				old_p = fp->_p;
-				if (__fflush(fp) == EOF) {
-					if (old_p == fp->_p)
-						fp->_p -= w;
+				if (__fflush(fp))
 					goto err;
-				}
 			} else if (s >= (w = fp->_bf._size)) {
 				w = _swrite(fp, p, w);
 				if (w <= 0)
diff --git a/lib/libc/stdio/wbuf.c b/lib/libc/stdio/wbuf.c
index 808cfa588cfb..558322b4001e 100644
--- a/lib/libc/stdio/wbuf.c
+++ b/lib/libc/stdio/wbuf.c
@@ -50,7 +50,6 @@ static char sccsid[] = "@(#)wbuf.c	8.1 (Berkeley) 6/4/93";
 int
 __swbuf(int c, FILE *fp)
 {
-	unsigned char *old_p;
 	int n;
 
 	/*
@@ -86,15 +85,8 @@ __swbuf(int c, FILE *fp)
 	}
 	fp->_w--;
 	*fp->_p++ = c;
-	old_p = fp->_p;
-	if (++n == fp->_bf._size || (fp->_flags & __SLBF && c == '\n')) {
-		if (__fflush(fp) != 0) {
-			if (fp->_p == old_p) {
-				fp->_p--;
-				fp->_w++;
-			}
+	if (++n == fp->_bf._size || (fp->_flags & __SLBF && c == '\n'))
+		if (__fflush(fp) != 0)
 			return (EOF);
-		}
-	}
 	return (c);
 }