[libvirt] [RFC PATCH] build: avoid %zu in translated strings

Daniel P. Berrange berrange at redhat.com
Wed Aug 18 09:04:04 UTC 2010


On Tue, Aug 17, 2010 at 04:05:03PM -0600, Eric Blake wrote:
> Mingw64 lacks %zu, and has the unfortunate setup where
> sizeof(long)==4 but sizeof(size_t)==8.  Since gnulib's
> printf-posix module is not LGPLv2+, the best we can do
> is manually cast to the only portable int type known to
> hold size_t, and rely on gnulib's inttypes.h.
> 
> * src/remote/remote_driver.c (remoteStreamPacket): Rewrite size_t
> formatting.
> * src/storage/storage_driver.c (storageWipeExtent): Likewise.
> ---
> 
> Here's the latter option; there are many more uses of %zu, but
> only in DEBUG statements.  I suppose it would also be easy enough
> to teach cfg.mk how to recognize and reject %z inside translated
> strings, as part of 'make syntax-check'.
> 
>  src/remote/remote_driver.c   |    7 +++++--
>  src/storage/storage_driver.c |    7 ++++---
>  2 files changed, 9 insertions(+), 5 deletions(-)
> 
> diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
> index cb0d8e1..d9115c8 100644
> --- a/src/remote/remote_driver.c
> +++ b/src/remote/remote_driver.c
> @@ -34,6 +34,7 @@
>  #include <fcntl.h>
>  #include <arpa/inet.h>
>  #include <sys/wait.h>
> +#include <inttypes.h>
> 
>  /* Windows socket compatibility functions. */
>  #include <errno.h>
> @@ -8024,8 +8025,10 @@ remoteStreamPacket(virStreamPtr st,
> 
>      if (status == REMOTE_CONTINUE) {
>          if (((4 + REMOTE_MESSAGE_MAX) - thiscall->bufferLength) < nbytes) {
> -            remoteError(VIR_ERR_RPC, _("data size %zu too large for payload %d"),
> -                        nbytes, ((4 + REMOTE_MESSAGE_MAX) - thiscall->bufferLength));
> +            remoteError(VIR_ERR_RPC,
> +                        _("data size %" PRIuMAX " too large for payload %d"),
> +                        (uintmax_t) nbytes,
> +                        ((4 + REMOTE_MESSAGE_MAX) - thiscall->bufferLength));

I find the PRI* stuff rather fugly. Can't we just use %llu and
cast to (unsigned long long)

The question of printf-posix license doesn't appear relevant since
remoteError & friends all use asprintf() which is LGPLv2+ already.

Regards,
Daniel
-- 
|: Red Hat, Engineering, London    -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :|
|: http://autobuild.org        -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-   F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list