On 30/11/2007, Andre Przywara <[EMAIL PROTECTED]> wrote: > > These casts are not the right way to get rid of the warnings, as are > > some of the casts in other files in qemu_put_* and qemu_get_* > > arguments. In this case the warnings are true positives and the bugs > > causing the warnings have to be addressed instead of just the > > warnings. > > Are you sure of that? Most of the fixes are like this: > >> - qemu_put_be32s(f, &s->count_shift); > >> + qemu_put_be32s(f, (uint32_t *)&s->count_shift); > qemu_put_be32s is (QEMUFile *f, const uint32_t *pv), but after all the > 2nd argument is only a _pointer_ to an unsigned variable, the size is > the same (thanks to the C99 explicit types).
count_shift is an int so it is the machine word size, not necesarily 32-bit AFAIK. Otherwise I guess gcc wouldn't warn. You can possibly use: qemu_put_be32(f, s->count_shift); Or point qemu_put_be32_s() to a int32_t/uint32_t variable. > > What solution do you prefer for the opaque types? I have used the simple: > >> - void *args[MAX_ARGS]; > >> + intptr_t args[MAX_ARGS]; > A more portable and clean solution would be this: > - void *args[MAX_ARGS]; > + union > + { > + void* ptr; > + int i; > + } args[MAX_ARGS]; > If you prefer this, I can change the patch accordingly. I'm not sure why you get a warning here and I'm unable to run a build at the moment. A void * should be able to store some (unknown size) integer regardless of the platform. Regards