History log of /src/lib/libc/stdio/fread.c |
Revision | | Date | Author | Comments |
1.27 |
| 20-Jan-2024 |
christos | Catch up with all the lint warnings since exit on warning was disabled. Disable 'missing header declaration' and 'nested extern' warnings for now.
|
1.26 |
| 07-Feb-2021 |
jdolecek | restore change from rev 1.23 "Avoid undefined behavior in fread(3)", mistakely removed as part __SNBF optimization
|
1.25 |
| 01-Feb-2021 |
jdolecek | for fread(3) and fwrite(3) check for (size * nmemb) size_t overflow, and error out with EOVERFLOW if it happens; this is less silly answer to a silly call than returning some randomly wrapped length
change adapted from OpenBSD
FreeBSD has a similar check, but they return EINVAL instead, feel free to adjust if SUS or other standard mandates specific value
suggested by Kamil Rytarowski
|
1.24 |
| 31-Jan-2021 |
jdolecek | for unbuffered I/O arrange for the destination buffer to be filled in one go, instead of triggering long series of 1 byte read(2)s; this speeds up fread() several order of magnitudes for this case, directly proportional to the size of the supplied buffer
change adapted from OpenBSD rev. 1.19
fixes PR lib/55808 by Roland Illig
|
1.23 |
| 22-Feb-2020 |
kamil | Avoid undefined behavior in fread(3)
On the first call to fread(3), just after fopen(3) the internal buffers are empty. This means that _r and _p (among others) are zeroed.
Passing NULL to the 2nd argument of memcpy(3) for the zero length is undefined. Calling _p += 0 triggers LLVM UBSan (NULL pointer arithmetic). Calling _p += 0, p += 0 and resid -= 0 has no effect.
Replace the "fp->_r = 0;" logic with a short circuit jump to __srefill() that sets _r internally and refills the FILE buffers.
No functional change from an end user point of view, except skipping a few dummy operations on the first call, for a FILE pointer, to fread(3).
|
1.22 |
| 15-Mar-2012 |
christos | branches: 1.22.32; 1.22.34; - ansify, knf. - no functional changes
|
1.21 |
| 13-Mar-2012 |
christos | PR/45989: Martin Husemann: lint invocation does include -w only on i386
- turn lint -w for all the platforms after fixing the lint warnings. - add _DIAGASSERTS() for casts that would assign values to types that would not fit. - change types, add casts - change into ansii prototypes - turn on _DIAGNOSTIC for libc (during current, to be eliminated for release builds)
approved by core@
|
1.20 |
| 25-Oct-2009 |
christos | branches: 1.20.6; revert some of dsl's changes to make things build on i386; he can undo what he wants when he comes back.
|
1.19 |
| 25-Oct-2009 |
dsl | Lint is differentially far too picky... Remove some warnings that only appear on i386 (not on amd64) and that for some reason best known to others are deemed fatal for i386. Making this code 'pass lint' does absolutely nothing for its readability (etc).
|
1.18 |
| 24-Oct-2009 |
dsl | Remove a load of pointless casts - one that even lint doesn't bleat about.
|
1.17 |
| 31-Jan-2009 |
lukem | sign-compare fix
|
1.16 |
| 07-Aug-2003 |
agc | Move UCB-licensed code from 4-clause to 3-clause licence.
Patches provided by Joel Baker in PR 22280, verified by myself.
|
1.15 |
| 18-Jan-2003 |
thorpej | Merge the nathanw_sa branch.
|
1.14 |
| 25-Jan-2001 |
lukem | branches: 1.14.2; apparently ansi c only required fread(3) to return 0 if size or nmembs == 0. however, susv2 adds the same to fwrite(3), so add the explicit check. document this for both fread & fwrite. move diagassert for buf!=NULL to after the (size * nmembs) == 0 check.
this has the helpful side effect of preventing the _DIAGASSERT()ion in fwrite() being triggered by lots of 3rdparty code that calls fwrite() with buf=NULL count=0
|
1.13 |
| 20-Sep-1999 |
lukem | back out the #ifdef _DIAGNOSTIC argument checks; too many people complained. _DIAGASSERT() is still retained.
|
1.12 |
| 17-Sep-1999 |
lukem | revert previous; if we examine SUS more closely we find that unless explictly specified, use of a NULL pointer is undefined
|
1.11 |
| 16-Sep-1999 |
lukem | return (0) if size or count == 0 before check for _DIAGASSERT(buf != NULL). this is ok according to SUS.
|
1.10 |
| 16-Sep-1999 |
lukem | * use _DIAGASSERT() to check pointer arguments against NULL and file descriptors against -1 (as appropriate). * add actual checks which to detect stuff that would trigger_DIAGASSERT(), and attempt to return a sane error condition. * knf some code * remove some `register' decls.
the first two items result in the addition of code similar to the following in various functions:
_DIAGASSERT(path != NULL) #ifdef _DIAGNOSTIC if (path == NULL) { errno = EFAULT; return (-1); } #endif
|
1.9 |
| 03-Feb-1998 |
perry | remove obsolete register declarations
|
1.8 |
| 19-Jan-1998 |
jtc | Use FLOCKFILE() and FUNLOCKFILE() macros from reentrant.h so that stdio can be made thread-safe.
|
1.7 |
| 13-Jul-1997 |
christos | Fix RCSID's Fix gcc warnings. Add prototypes for functions that were declared in more than one place to local.h or extern.h and use that instead.
|
1.6 |
| 02-Feb-1995 |
jtc | Merged with 4.4lite. Changed to conform to NetBSD's new RCS Id convention.
|
1.5 |
| 14-Dec-1993 |
jtc | Change from Chris Torek (via comp.std.c) to make fread() ANSI compliant.
|
1.4 |
| 04-Oct-1993 |
jtc | fread and fwrite both return size_t, not int.
|
1.3 |
| 26-Aug-1993 |
jtc | Declare rcsid strings so they are stored in text segment.
|
1.2 |
| 01-Aug-1993 |
mycroft | Add RCS identifiers.
|
1.1 |
| 21-Mar-1993 |
cgd | branches: 1.1.1; Initial revision
|
1.1.1.2 |
| 02-Feb-1995 |
jtc | imported from 44lite
|
1.1.1.1 |
| 21-Mar-1993 |
cgd | initial import of 386bsd-0.1 sources
|
1.14.2.1 |
| 06-Feb-2002 |
nathanw | #include "reentrant.h" before "local.h" so that the thread types used in fileext.h are avaliable.
|
1.20.6.1 |
| 17-Apr-2012 |
yamt | sync with head
|
1.22.34.1 |
| 07-Feb-2021 |
martin | Pull up following revision(s) (requested by jdolecek in ticket #1198):
lib/libc/stdio/fread.c: revision 1.24 (via patch)
for unbuffered I/O arrange for the destination buffer to be filled in one go, instead of triggering long series of 1 byte read(2)s; this speeds up fread() several order of magnitudes for this case, directly proportional to the size of the supplied buffer change adapted from OpenBSD rev. 1.19
fixes PR lib/55808 by Roland Illig
|
1.22.32.1 |
| 08-Apr-2020 |
martin | Merge changes from current as of 20200406
|