Commit Graph

1042 Commits

Author SHA1 Message Date
Rich Felker
58f430c1e0 new gcc wrapper, entirely specfile based
the _concept_ of this wrapper has been tested extensively, but the
integration with the build/install system, and using a persistent
specfile rather than one generated at build-time, have not been
heavily tested and may need minor tweaks.

this approach should be a lot more robust (and easier to improve) than
writing a shell script that's responsible for trying to mimic gcc's
logic about whether it's compiling or linking, building shared libs or
executable files, etc. it's also lighter weight and should result in
mildly faster builds when using the wrapper.
2012-04-22 14:32:49 -04:00
Rich Felker
02eb568ded remove redundant (unmaintained) check in floatscan
also be extra careful to avoid wrapping the circular buffer early
2012-04-22 14:05:12 -04:00
Rich Felker
3f4de355ba fix breakage in endian.h 2012-04-22 11:19:17 -04:00
Rich Felker
8705a0f1af add some ugly byte swapping cruft in endian.h 2012-04-22 11:08:01 -04:00
Rich Felker
b1b3d3525b add getresuid and getresgid syscall wrappers 2012-04-22 10:37:19 -04:00
Rich Felker
80d7859f32 fix major breakage in iconv, bogus rejecting of dest charsets 2012-04-21 14:46:40 -04:00
Rich Felker
77731d0ec1 make floatscan correctly set errno for overflow/underflow
care is taken that the setting of errno correctly reflects underflow
condition. scanning exact denormal values does not result in ERANGE,
nor does scanning values (such as the usual string definition of
FLT_MIN) which are actually less than the smallest normal number but
which round to a normal result.

only the decimal case is handled so far; hex float require a separate
fix to come later.
2012-04-21 14:14:10 -04:00
Rich Felker
2df2a97a20 skip leading zeros even after decimal point in floatscan
in principle this should just be an optimization, but it happens to
also fix a nasty bug where values like 0.00000000001 were getting
caught by the early zero detection path and wrongly scanned as zero.
2012-04-21 13:50:23 -04:00
Rich Felker
33e7781b5b fix overread (consuming an extra byte) scanning NAN
bug detected by glib test suite
2012-04-21 11:57:39 -04:00
Rich Felker
c613125966 fix broken sysconf when correct value is -1
this caused glib to try to allocate >2gb for getpwnam_r, and probably
numerous other problems.
2012-04-21 11:45:07 -04:00
Rich Felker
c5d1adc56c release notes for 0.8.9 (bugfix release) 2012-04-19 22:02:50 -04:00
Rich Felker
1bf725eda7 further fixes to leading space issue (forgot the wide versions) 2012-04-19 12:56:29 -04:00
Rich Felker
cb81b6947c fix really bad breakage in strtol, etc.: failure to accept leading spaces 2012-04-19 12:47:34 -04:00
Rich Felker
769d3d3498 fix header typo 2012-04-18 13:11:35 -04:00
Rich Felker
ba6a9e7734 legacy junk compatibility grab-bag
- add the rest of the junk traditionally in sys/param.h
- add prototypes for some nonstandard functions
- add _GNU_SOURCE to their source files so the compiler can check proto
2012-04-18 12:22:24 -04:00
Rich Felker
ed0e3a357e fix incorrect macro name for MATH_ERREXCEPT in math.h 2012-04-18 11:41:04 -04:00
Rich Felker
ef2c4fd91f release notes for 0.8.8 2012-04-18 04:40:06 -04:00
Rich Felker
1ff3e6fa25 fix typo in exponent reading code or floats
this was basically harmless, but could have resulted in misreading
inputs with more than a few gigabytes worth of digits..
2012-04-18 03:53:53 -04:00
Rich Felker
bdeb184c3d fix wide scanf's handling of input failure on %c, and simplify %[ 2012-04-17 23:35:49 -04:00
Rich Felker
a12aa29185 fix failure to distinguish input/match failure in wide %[ scanf
this also includes a related fix for vswscanf's read function, which
was returning a spurious (uninitialized) character for empty strings.
2012-04-17 23:08:58 -04:00
Rich Felker
2dd5dc78d4 fix over-read in %ls with non-wide scanf 2012-04-17 22:41:38 -04:00
Rich Felker
9ab180fa57 fix broken %s and %[ with no width specifier in wide scanf 2012-04-17 22:15:33 -04:00
Rich Felker
dad4040770 fix failure to read infinity in scanf
this code worked in strtod, but not in scanf. more evidence that i
should design a better interface for discarding multiple tail
characters than just calling unget repeatedly...
2012-04-17 22:05:51 -04:00
Rich Felker
bb477f9fd4 fix failure of int parser to unget an initial mismatching character 2012-04-17 21:17:19 -04:00
Rich Felker
99fbf4cfdb make wide scanf %[ respect width 2012-04-17 21:17:09 -04:00
Rich Felker
0072251572 fix wide scanf to respect field width for strings 2012-04-17 19:37:31 -04:00
Rich Felker
e0d9f780d1 fix some bugs in scanf %[ handling detected while writing the wide version 2012-04-17 14:22:22 -04:00
Rich Felker
73ec1d0495 introduce new wide scanf code and remove the last remnants of old scanf
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.
2012-04-17 14:19:46 -04:00
Rich Felker
8b57a81577 avoid depending on POSIX symbol in code used from plain C functions 2012-04-17 13:17:01 -04:00
Rich Felker
03de77f521 avoid null pointer dereference on %*p fields in scanf 2012-04-17 11:50:02 -04:00
Rich Felker
b7a2761780 also ensure that write buffer is bounded when __stdio_write returns
assuming other code is correct, this should be a no-op, but better to
be safe...
2012-04-17 11:08:11 -04:00
Rich Felker
b5a8b28915 fix buffer overflow in vfprintf on long writes to unbuffered files
vfprintf temporarily swaps in a local buffer (for the duration of the
operation) when the target stream is unbuffered; this both simplifies
the implementation of functions like dprintf (they don't need their
own buffers) and eliminates the pathologically bad performance of
writing the formatted output with one or more write syscalls per
formatting field.

in cases like dprintf where we are dealing with a virgin FILE
structure, everything worked correctly. however for long-lived files
(like stderr), it's possible that the buffer bounds were already set
for the internal zero-size buffer. on the next write, __stdio_write
would pick up and use the new buffer provided by vfprintf, but the
bound (wend) field was still pointing at the internal zero-size
buffer's end. this in turn allowed unbounded writes to the temporary
buffer.
2012-04-17 10:58:02 -04:00
Rich Felker
cc3a446660 fix %lf, etc. with printf
the l prefix is redundant/no-op with printf, since default promotions
always promote floats to double; however, it is valid, and printf was
wrongly rejecting it.
2012-04-16 21:50:23 -04:00
Rich Felker
9d2a15a64e better description for errno==0 2012-04-16 18:37:53 -04:00
Rich Felker
f94cbdeb41 implement wcstod and family
not heavily tested but these functions appear to work correctly
2012-04-16 17:26:54 -04:00
Rich Felker
a4310aa2f5 avoid hitting eof in wcstol
shunget cannot unget eof status, causing wcstol to leave endptr
pointing to the wrong place when scanning, for example, L"0x". cheap
fix is to make the read function provide an infinite stream of bogus
characters rather than eof. really this is something of a design flaw
in how the shgetc system is used for strto* and wcsto*; in the long
term, I believe multi-character unget should be scrapped and replaced
with a function that can subtract from the f->shcnt counter.
2012-04-16 17:17:05 -04:00
Rich Felker
96e9773eb7 use the new integer parser (FILE/shgetc based) for strtol, wcstol, etc. 2012-04-16 16:55:24 -04:00
Rich Felker
18efeb320b new scanf implementation and corresponding integer parser/converter
advantages over the old code:
- correct results for floating point (old code was bogus)
- wide/regular scanf separated so scanf does not pull in wide code
- well-defined behavior on integers that overflow dest type
- support for %[a-b] ranges with %[ (impl-defined by widely used)
- no intermediate conversion of fmt string to wide string
- cleaner, easier to share code with strto* functions
- better standards conformance for corner cases

the old code remains in the source tree, as the wide versions of the
scanf-family functions are still using it. it will be removed when no
longer needed.
2012-04-16 16:03:45 -04:00
Rich Felker
cc762434d9 fix buggy limiter handling in shgetc
this is needed for upcoming new scanf
2012-04-16 15:36:18 -04:00
Rich Felker
0d5df2df4f wordexp must set the we_offs entries of we_wordv to null pointers 2012-04-16 13:25:05 -04:00
Rich Felker
bef7a85e45 fix crash in wordfree if we_offs is not initialized by the caller
I'm not sure if it's legal for wordexp to modify this field, but this
is the only easy/straightforward fix, and applications should not
care. if it's an issue, i can work out a different (but more complex)
solution later.
2012-04-16 13:03:22 -04:00
Rich Felker
f007bb854b fix broken shgetc limiter logic (wasn't working) 2012-04-16 01:55:37 -04:00
Rich Felker
2ac580fdfe floatscan: fix incorrect count of leading nonzero digits
this off-by-one error was causing values with just one digit past the
decimal point to be treated by the integer case. in many cases it
would yield the correct result, but if expressions are evaluated in
excess precision, double rounding may occur.
2012-04-16 01:53:52 -04:00
Rich Felker
67b25fe0a8 move F_DUPFD_CLOEXEC out of bits
fcntl values 1024 and up are universal, arch-independent. later I'll
add some of the other linux-specific ones for notify, leases, pipe
size, etc. here too.
2012-04-15 17:05:10 -04:00
Rich Felker
a68af22926 add F_SETSIG and F_GETSIG (linux specific) to fcntl.h
F_* is in the reserved namespace so no feature test is needed
2012-04-15 17:01:58 -04:00
Rich Felker
b9dd43db04 fix signedness error handling invalid multibyte sequences in regexec
the "< 0" test was always false due to use of an unsigned type. this
resulted in infinite loops on 32-bit machines (adding -1U to a pointer
is the same as adding -1) and crashes on 64-bit machines (offsetting
the string pointer by 4gb-1b when an illegal sequence was hit).
2012-04-14 22:32:42 -04:00
Rich Felker
0115a6ed96 rename __sa_restorer to sa_restorer in struct sigaction
this is legal since sa_* is in the reserved namespace for signal.h,
per posix. note that the sa_restorer field is not used anywhere, so
programs that are trying to use it may still break, but at least
they'll compile. if it turns out such programs actually need to be
able to set their own sa_restorer to function properly, i'll add the
necessary code to sigaction.c later.
2012-04-13 23:06:54 -04:00
Rich Felker
386b34a07b remove invalid code from TRE
TRE wants to treat + and ? after a +, ?, or * as special; ? means
ungreedy and + is reserved for future use. however, this is
non-conformant. although redundant, these redundant characters have
well-defined (no-op) meaning for POSIX ERE, and are actually _literal_
characters (which TRE is wrongly ignoring) in POSIX BRE mode.

the simplest fix is to simply remove the unneeded nonstandard
functionality. as a plus, this shaves off a small amount of bloat.
2012-04-13 19:50:58 -04:00
Rich Felker
b6dbdc69b6 fix broken regerror (typo) and missing message 2012-04-13 18:40:38 -04:00
Rich Felker
11f3e33f9b use fast version of the int reading code for the high-order digits too
this increases code size slightly, but it's considerably faster,
especially for power-of-2 bases.
2012-04-13 04:38:56 -04:00