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 [email protected] +1-801-349-2682 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
