Age | Commit message (Collapse) | Author | Lines |
2018年09月16日 | fix null pointer subtraction and comparison in stdio | Rich Felker | -1/+1 |
|
morally, for null pointers a and b, a-b, a<b, and a>b should all be
defined as 0; however, C does not define any of them.
the stdio implementation makes heavy use of such pointer comparison
and subtraction for buffer logic, and also uses null pos/base/end
pointers to indicate that the FILE is not in the corresponding (read
or write) mode ready for accesses through the buffer.
all of the comparisons are fixed trivially by using != in place of the
relational operators, since the opposite relation (e.g. pos>end) is
logically impossible. the subtractions have been reviewed to check
that they are conditional the stream being in the appropriate reading-
or writing-through-buffer mode, with checks added where needed.
in fgets and getdelim, the checks added should improve performance for
unbuffered streams by avoiding a do-nothing call to memchr, and should
be negligible for buffered streams.
|
2018年09月12日 | reduce spurious inclusion of libc.h | Rich Felker | -1/+0 |
|
libc.h was intended to be a header for access to global libc state and
related interfaces, but ended up included all over the place because
it was the way to get the weak_alias macro. most of the inclusions
removed here are places where weak_alias was needed. a few were
recently introduced for hidden. some go all the way back to when
libc.h defined CANCELPT_BEGIN and _END, and all (wrongly implemented)
cancellation points had to include it.
remaining spurious users are mostly callers of the LOCK/UNLOCK macros
and files that use the LFS64 macro to define the awful *64 aliases.
in a few places, new inclusion of libc.h is added because several
internal headers no longer implicitly include libc.h.
declarations for __lockfile and __unlockfile are moved from libc.h to
stdio_impl.h so that the latter does not need libc.h. putting them in
libc.h made no sense at all, since the macros in stdio_impl.h are
needed to use them correctly anyway.
|
2017年09月04日 | handle whitespace before %% in scanf | Bartosz Brachaczek | -2/+6 |
|
this is mandated by C and POSIX standards and is in accordance with
glibc behavior.
|
2017年03月14日 | fix wide scanf's use of a compound literal past its lifetime | Rich Felker | -1/+2 |
|
2015年06月13日 | fix idiom for setting stdio stream orientation to wide | Rich Felker | -1/+1 |
|
the old idiom, f->mode |= f->mode+1, was adapted from the idiom for
setting byte orientation, f->mode |= f->mode-1, but the adaptation was
incorrect. unless the stream was alreasdy set byte-oriented, this code
incremented f->mode each time it was executed, which would eventually
lead to overflow. it could be fixed by changing it to f->mode |= 1,
but upcoming changes will require slightly more work at the time of
wide orientation, so it makes sense to just call fwide. as an
optimization in the single-character functions, fwide is only called
if the stream is not already wide-oriented.
|
2014年07月02日 | fix failure of wide printf/scanf functions to set wide orientation | Rich Felker | -0/+2 |
|
in some cases, these functions internally call a byte-based input or
output function before calling getwc/putwc, so they cannot rely on the
latter to set the orientation.
|
2013年12月12日 | include cleanups: remove unused headers and add feature test macros | Szabolcs Nagy | -3/+0 |
|
2013年08月31日 | fix invalid %m format crash in wide scanf variants | Rich Felker | -0/+2 |
|
the wide variant was missed in the previous commit.
|
2013年07月20日 | fix uninitialized/stale use of alloc (%m modifier) flag in scanf | Rich Felker | -0/+2 |
|
for conversion specifiers, alloc is always set when the specifier is
parsed. however, if scanf stops due to mismatching literal text,
either an uninitialized (if no conversions have been performed yet) or
stale (from the previous conversion) of the flag will be used,
possibly causing an invalid pointer to be passed to free when the
function returns.
|
2013年06月22日 | fix scanf %c conversion wrongly storing a terminating null byte | Rich Felker | -2/+4 |
|
this seems to have been a regression from the refactoring which added
the 'm' modifier.
|
2013年06月06日 | implement 'm' modifier for wide scanf variants | Rich Felker | -7/+40 |
|
2013年06月05日 | refactor wide-char scanf string handling | Rich Felker | -55/+32 |
|
this brings the wide version of the code into alignment with the
byte-based version, in preparation for adding support for the m
(malloc) modifier.
|
2013年04月05日 | Add ABI compatability aliases. | Isaac Dunham | -0/+3 |
|
GNU used several extensions that were incompatible with C99 and POSIX,
so they used alternate names for the standard functions.
The result is that we need these to run standards-conformant programs
that were linked with glibc.
|
2012年09月06日 | use restrict everywhere it's required by c99 and/or posix 2008 | Rich Felker | -1/+1 |
|
to deal with the fact that the public headers may be used with pre-c99
compilers, __restrict is used in place of restrict, and defined
appropriately for any supported compiler. we also avoid the form
[restrict] since older versions of gcc rejected it due to a bug in the
original c99 standard, and instead use the form *restrict.
|
2012年04月17日 | fix wide scanf's handling of input failure on %c, and simplify %[ | Rich Felker | -5/+6 |
|
2012年04月17日 | fix failure to distinguish input/match failure in wide %[ scanf | Rich Felker | -1/+3 |
|
this also includes a related fix for vswscanf's read function, which
was returning a spurious (uninitialized) character for empty strings.
|
2012年04月17日 | fix broken %s and %[ with no width specifier in wide scanf | Rich Felker | -3/+7 |
|
2012年04月17日 | make wide scanf %[ respect width | Rich Felker | -2/+3 |
|
2012年04月17日 | fix wide scanf to respect field width for strings | Rich Felker | -4/+7 |
|
2012年04月17日 | introduce new wide scanf code and remove the last remnants of old scanf | Rich Felker | -13/+284 |
|
at this point, strto* and all scanf family functions are using the new
unified integer and floating point parser/converter code.
the wide scanf is largely a wrapper for ordinary byte-based scanf;
since numbers can only contain ascii characters, only strings need to
be handled specially.
|
2011年02月12日 | initial check-in, version 0.5.0 v0.5.0 | Rich Felker | -0/+28 |
|