Subject: Re: bug#7325: new test failure due to non-portability of printf formats like %05.3s

From: Jim Meyering <[email-masked]>
Date: Thu, 04 Nov 2010 21:42:29 +0100

Paul Eggert wrote:
> On 11/04/10 00:56, Jim Meyering wrote:
>
>> However, what about Eric's example?
>>
>>   $ src/stat-p -c '_%-0 010.4:X_' k  # yours
>>   _234       _
>>   $ src/stat-j -c '_%-0 010.4:X_' k  # mine
>>   _0234      _
>
> That's simply an issue of whether the value is considered to be signed
> or unsigned, and can be fixed by the patch at the end of this message.
>
> However, let me take a step back a minute.  Do users really want all
> this functionality?  Personally, what I'd like to see is a single
> format like this:
>
>    %.3X
>
> that prints out the entire seconds since the Epoch, truncated
> to millseconds.  That's simpler than what we require now:
>
>    %X.%.3:X
>
> The changelogs suggest that we used to do things the simpler way,
> but changed on Oct. 21.  I don't recall this being discussed: I

It was due to portability concerns, since with coreutils-8.6,
%X, %Y, etc. expanded to floating point values, and that broke
backwards compatibility:

  http://thread.gmane.org/gmane.comp.gnu.coreutils.general/161/focus=366

However, enabling floating point output only when there is a ".PREC"
part of the format sounds like a fine compromise.
Sure, old scripts that used %.3X (expecting no ".") would break,
but I doubt any such uses exist, since that notation did nothing useful.

A patch would be most welcome.

> assume it was due to floating point rounding issues.  Still, I'd
> prefer the simpler notation, and we should be able to implement it
> without floating point.  Would that be OK?  The idea would be
> to support ".PRECISION" in the formats for W, X, Y, and Z, and
> to drop support for ':W' and the like.