On Mon, Jan 25, 2010 at 07:47:56PM +0200, Michael S. Tsirkin wrote: > On Mon, Jan 25, 2010 at 06:32:06PM +0100, Stefan Weil wrote: > > Michael S. Tsirkin schrieb: > > > On Sun, Jan 24, 2010 at 09:23:41PM +0000, Herve Poussineau wrote: > > >> Replace %lld occurrences by PRId64. > > > > > > This is wrong. > > > long long values should be printed with %lld. > > > size_t - with %zd. PRId64 is for int64_t. > > > > > > > size_t => %zu, ssize_t => %zd might be better. > > > > And none of them works on win32, so using them > > there can result in a crash: > > > > size_t st = 4711; > > fprintf(stderr, "st=%zu, %s\n", st, "test"); > > > > printf functions on win32 don't know %z. > > They run > > > > fprintf(stderr, "st=zu, %s\n", st, "test"); > > > > which results in an memory access fault when printf > > wants to read the memory at address 0x4711. > > > > Regards, > > Stefan Weil > > Let's just implement a compliant printf?
It is a shame that QEMU isn't using GNULIB, since that comes with a nice portable replacement printf() implementation that is transparently used on any broken platform. Beyond just Win32, a great many UNIX have broken printf() in one form or another too: http://www.gnu.org/software/hello/manual/gnulib/printf.html I don't know how easy it would be to extract the gnulib printf() impl on its own and use that in QEMU without the entire gnulib infrastructure Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|