Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/lib/libc/stdio restore change from rev 1.23 "Avoid undefined...
details: https://anonhg.NetBSD.org/src/rev/1d5733311823
branches: trunk
changeset: 959302:1d5733311823
user: jdolecek <jdolecek%NetBSD.org@localhost>
date: Sun Feb 07 15:54:09 2021 +0000
description:
restore change from rev 1.23 "Avoid undefined behavior in fread(3)", mistakely
removed as part __SNBF optimization
diffstat:
lib/libc/stdio/fread.c | 12 ++++++++----
1 files changed, 8 insertions(+), 4 deletions(-)
diffs (46 lines):
diff -r 9a0cae0526d4 -r 1d5733311823 lib/libc/stdio/fread.c
--- a/lib/libc/stdio/fread.c Sun Feb 07 15:51:11 2021 +0000
+++ b/lib/libc/stdio/fread.c Sun Feb 07 15:54:09 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: fread.c,v 1.25 2021/02/01 17:50:53 jdolecek Exp $ */
+/* $NetBSD: fread.c,v 1.26 2021/02/07 15:54:09 jdolecek Exp $ */
/*-
* Copyright (c) 1990, 1993
@@ -37,7 +37,7 @@
#if 0
static char sccsid[] = "@(#)fread.c 8.2 (Berkeley) 12/11/93";
#else
-__RCSID("$NetBSD: fread.c,v 1.25 2021/02/01 17:50:53 jdolecek Exp $");
+__RCSID("$NetBSD: fread.c,v 1.26 2021/02/07 15:54:09 jdolecek Exp $");
#endif
#endif /* LIBC_SCCS and not lint */
@@ -81,8 +81,6 @@
_DIAGASSERT(buf != NULL);
FLOCKFILE(fp);
- if (fp->_r < 0)
- fp->_r = 0;
total = resid;
p = buf;
@@ -115,12 +113,18 @@
return (count);
}
+ if (fp->_r <= 0) {
+ /* Nothing to read on enter, refill the buffers. */
+ goto refill;
+ }
+
while (resid > (size_t)(r = fp->_r)) {
(void)memcpy(p, fp->_p, (size_t)r);
fp->_p += r;
/* fp->_r = 0 ... done in __srefill */
p += r;
resid -= r;
+refill:
if (__srefill(fp)) {
/* no more input: return partial result */
FUNLOCKFILE(fp);
Home |
Main Index |
Thread Index |
Old Index