GNU bug report logs - #7325
new test failure due to non-portability of printf formats like %05.3s

Previous Next

Package: coreutils;

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

From: Eric Blake <eblake <at> redhat.com>
To: Jim Meyering <jim <at> meyering.net>
Cc: 7325 <at> debbugs.gnu.org
Subject: bug#7325: new test failure due to non-portability of printf formats like %05.3s
Date: Wed, 03 Nov 2010 15:32:55 -0600
[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.