Subject: Re: bug#74427: tests/printf/printf-indexed failure on macOS

From: Paul Eggert <[email-masked]>
Date: Tue, 19 Nov 2024 12:02:41 -0800

On 2024-11-19 09:53, Pádraig Brady wrote:
> Do we really want to treat NUL and NULL strings differently?
> 
>    $ src/printf '%d\n'
>    0
>    $ src/printf '%d\n' ''
>    printf: ‘’: expected a numeric value
>    0

Both behaviors are required by POSIX, so yes, we want to treat them 
differently. Also, it makes sense to treat '' like ' '; we report an 
error for the latter so we should report it for the former too.

> More problematically I think is it's also inconsistent with %s
> 
>   $ src/printf '%s'
>   $ src/printf '%s' '' 

I don't see a problem there. As per POSIX, missing string arguments are 
treated as empty strings, whereas missing numeric arguments are treated 
as zero.

> That's different to bash and dash.

AIX and Solaris 10 printf do things the right way (i.e., conform to 
POSIX) - not surprising as AIX at least has gone through POSIX 
conformance tests. I expect the GNU divergence from tradition was 
accidental, as it doesn't make sense for printf to treat '' differently 
from other non-numbers.

I filed bug reports for both Bash and Dash; see:

https://lists.gnu.org/r/bug-bash/2024-11/msg00149.html
https://lore.kernel.org/dash/[email-masked]/T/#u

> BTW after we decide the best operation, we should update NEWS. 

Thanks, good point. How about something like the following:

printf now diagnoses attempts to treat empty strings as numbers, as per 
POSIX. For example, "printf '%d' ''" now issues a diagnostic and fails 
instead of silently succeeding.