On 4/12/12 12:25 PM, Petr Sumbera wrote:
Hi,
we are running Bash 3.2.38 on Solaris 10 where asprintf() isn't available.
Thus code in snprintf.c is used.
There is a problem with following command:
bash -c 'printf "x%10.0fx\n" 123'
x0000000123x
Where correct output should be:
x 123x
It seems that '0' after '.' enables zero padding. Please see proposed patch
bellow:
--- bash-3.2.48/lib/sh/snprintf.c Tue Dec 12 12:10:18 2006
+++ bash-3.2.48/lib/sh/snprintf.c Thu Apr 12 08:55:44 2012
@@ -1277,6 +1277,8 @@
data->flags |= PF_ALTFORM;
continue;
case '0':
+ if (data->flags& PF_DOT)
+ continue;
data->flags |= PF_ZEROPAD;
data->pad = '0';
continue;
The same code seems to be also in Bash 4.1 so I guess the problem is still
there.
Any comments?
Thanks for the report. Try this slightly improved patch; yours (and the
original code) doesn't treat a precision specifier beginning with a `0'
correctly. (And the test has to use `printf -v' to exercise the right
code in bash-4.0 and later.)
Chet