GNU bug report logs -
#7325
new test failure due to non-portability of printf formats like %05.3s
Previous Next
Reported by: Jim Meyering <jim <at> meyering.net>
Date: Wed, 3 Nov 2010 18:56:02 UTC
Severity: normal
Done: Pádraig Brady <P <at> draigBrady.com>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
On 11/03/2010 03:26 PM, Jim Meyering wrote:
>> I agree that %05.3:X resulting in 00023 would be ideal. And I agree
>> that we'd have to trim off the 0 modifier before calling the underlying
>> printf %s, and thus be responsible for putting in '0' padding ourselves
>> rather than relying on printf() padding.
>
> Thanks for confirming.
> Here's the patch I'm considering:
>
> diff --git a/src/stat.c b/src/stat.c
> index d05a93b..993db48 100644
> --- a/src/stat.c
> +++ b/src/stat.c
> @@ -472,6 +472,23 @@ epoch_sec (struct timespec t)
> return timetostr (t.tv_sec, str);
> }
>
> +/* Convert a LEN-byte FORMAT modifier, e.g., "0009.4", to "9.4".
> + Do it in place and return the new length. */
> +static size_t
> +sanitize_format_string (char *format, size_t len)
> +{
> + char *p = format;
> + char const *end = format + len;
> + while (p < end && *p == '0')
> + p++;
> + if (p == format)
> + return len;
> +
> + len -= p - format;
> + memmove (format, p, len);
> + return len;
> +}
Not just leading zeros. Think also about "%-0 010.4:X", which must
sanitize to "%- 10.4s" - that is, you must strip any zero until the
first non-zero digit or '.' is found.
--
Eric Blake eblake <at> redhat.com +1-801-349-2682
Libvirt virtualization library http://libvirt.org
[signature.asc (application/pgp-signature, attachment)]
This bug report was last modified 14 years and 192 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.