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

Eric Blake eblake at redhat.com
Wed Aug 18 13:41:16 UTC 2010


On 08/18/2010 03:04 AM, Daniel P. Berrange wrote:
> 
> I find the PRI* stuff rather fugly. Can't we just use %llu and
> cast to (unsigned long long)

Unfortunately, %llu is equally non-portable to mingw.  And yes, we also
have some %llu encoded into translated strings, which would also need help.

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

We use the 'vasprintf' module, which is indeed LGPLv2+, but it does not
guarantee the existence of %llu nor %zu -- it only guarantees that you
have the [v]asprintf wrappers around your current system's
(non-)compliant printf family, so it inherits the same bugs regarding
unsupported specifiers.  We would have to use the vasprintf-posix module
to get %zu, but that module is LGPLv3+.

One other potential solution: most (all?) of our translated strings
involve error messages, and are therefore already funneled through our
virterror.c implementation.  As long as a string containing %zu or %llu
is never directly handed to printf, but is guaranteed to go through
virterror.c, then it would be possible to have virterror.c do some
#ifdef magic such that on all sane platforms, the %zu and %llu are used
unchanged (no extra overhead required); but on broken platforms (aka
mingw), %zu and %llu are translated at runtime to %lu or %I64u (the %zu
translation depends on whether you are 32-bit/64-bit mingw, and the
64-bit translation relies on microsoft's non-standard format specifier).
 This solution would then confine the ugliness to one file, such that
the rest of libvirt can use %zu and %llu at will.

-- 
Eric Blake   eblake at redhat.com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 619 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20100818/8fbe23aa/attachment-0001.sig>


More information about the libvir-list mailing list