[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