Date: Thu, 31 Mar 2022 15:32:53 GMT From: Mark Johnston <markj@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Subject: git: 7be0c792c46c - stable/13 - libc: Restore fp state upon flush error in fputc Message-ID: <202203311532.22VFWr8x053353@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch stable/13 has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=7be0c792c46c5a1faf46b611058953aa85b192d6 commit 7be0c792c46c5a1faf46b611058953aa85b192d6 Author: Mark Johnston <markj@FreeBSD.org> AuthorDate: 2022-03-25 14:46:24 +0000 Commit: Mark Johnston <markj@FreeBSD.org> CommitDate: 2022-03-31 15:21:48 +0000 libc: Restore fp state upon flush error in fputc This is akin to commit bafaa70b6f9098d83d074968c8e6747ecec1e118. Reported by: Guy Yur <guyyur@gmail.com> Fixes: 86a16ada1ea6 Sponsored by: The FreeBSD Foundation (cherry picked from commit 6e13794fbe6e82c21365d0fd66769bf8b19c0197) --- lib/libc/stdio/wbuf.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/libc/stdio/wbuf.c b/lib/libc/stdio/wbuf.c index e1aa70243e94..6cd75145a271 100644 --- a/lib/libc/stdio/wbuf.c +++ b/lib/libc/stdio/wbuf.c @@ -52,6 +52,7 @@ __FBSDID("$FreeBSD$"); int __swbuf(int c, FILE *fp) { + unsigned char *old_p; int n; /* @@ -87,8 +88,15 @@ __swbuf(int c, FILE *fp) } fp->_w--; *fp->_p++ = c; - if (++n == fp->_bf._size || (fp->_flags & __SLBF && c == '\n')) - if (__fflush(fp)) + old_p = fp->_p; + if (++n == fp->_bf._size || (fp->_flags & __SLBF && c == '\n')) { + if (__fflush(fp)) { + if (fp->_p == old_p) { + fp->_p--; + fp->_w++; + } return (EOF); + } + } return (c); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202203311532.22VFWr8x053353>