cosmopolitan/test/libc
Gabriel Ravier 7f925e6be9
Fix issues 774, 782 and 789 (printf precision bugs) (#790)
The C standard states that, within the context of a printf-family
function, when specifying the precision of a conversion specification:

> A negative precision argument is taken as if the precision were
> omitted.
- Quoth the C Standard, 7.23.6.1. The fprintf function

Cosmopolitan instead treated negative precision arguments as
though they had a value of 0, which was non-conforming. This
change fixes that. Another issue we found relates to:

> For o conversion, it increases the precision, if and only if
> necessary, to force the first digit of the result to be a zero (if
> the value and precision are both 0, a single 0 is printed).
- Quoth the C standard, 7.23.6.1.6. The fprintf function

When printing numbers in their alternative form, with a precision and
with a conversion specifier of o (octal), Cosmopolitan wasn't following
the standard in two ways:

1. When printing a value with a precision that results in 0-padding,
   cosmopolitan would still add an extra 0 even though this should be
   done "if and only if necessary"
2. When printing a value of 0 with a precision of 0, nothing is
   printed, even though the standard specifically states that a single
   0 is printed in this case

This change fixes those issues too. Furthermore, regression tests have
been introduced to ensure Cosmopolitan continues to be conformant
going forward.

Fixes #774 
Fixes #782 
Fixes #789
2023-03-29 01:11:48 -07:00
..
bits Fold LIBC_BITS into LIBC_INTRIN 2022-08-11 12:13:18 -07:00
calls Avoid matching directories when searching PATH (#717) 2023-03-06 11:15:32 -05:00
dns Rename rand64() to _rand64() 2022-10-10 04:12:06 -07:00
fmt Fix issues 774, 782 and 789 (printf precision bugs) (#790) 2023-03-29 01:11:48 -07:00
intrin Make intrin_test go faster 2023-03-05 22:57:07 -08:00
log Add WSL to test fleet 2022-11-02 06:49:42 -07:00
mem Improve cancellations, randomness, and time 2022-11-05 23:45:32 -07:00
nexgen32e Rename rand64() to _rand64() 2022-10-10 04:12:06 -07:00
release Add *NSYNC to libc/isystem 2022-09-13 01:47:12 -07:00
runtime Remove problematic test 2023-02-05 16:50:04 -08:00
sock Update tests and CPU detection for Blink 2023-01-18 00:56:09 -08:00
stdio GetZipCdir: prevent integer underflow. posix_spawn_test.c: stop attempting to load zipos from /usr/bin/ape. (#758) 2023-03-05 14:29:38 -08:00
str Implement pthread_atfork() 2022-10-16 12:25:13 -07:00
thread Make POSIX semaphores always process shared 2023-02-23 08:07:54 -08:00
time Make fixes and improvements 2022-10-19 07:19:19 -07:00
tinymath Pay off more technical debt 2022-09-12 23:36:56 -07:00
x Greatly expand system() shell code features 2022-10-11 21:30:31 -07:00
xed Pay off more technical debt 2022-09-12 23:36:56 -07:00
zipos Add fexecve() and map O_EXEC to O_PATH on Linux 2022-10-02 09:15:46 -07:00
test.mk Don't relocate file descriptor memory 2022-09-09 16:54:28 -07:00