Re: [Qemu-devel] [PATCH] Introduce QEMU_NEW()

Avi Kivity
2011-07-25T10:13:03Z

On 07/25/2011 01:06 PM, Stefan Hajnoczi wrote:
> > char *qemu_strndup(const char *str, size_t size);
> >
> > +#define QEMU_NEW(type) ((type *)(qemu_malloc(sizeof(type))))
> > +#define QEMU_NEWZ(type) ((type *)(qemu_mallocz(sizeof(type))))
>
> Does this mean we need to duplicate the type name for each allocation?
>
> struct foo *f;
>
> ...
> f = qemu_malloc(sizeof(*f));
>
> Becomes:
>
> struct foo *f;
>
> ...
> f = QEMU_NEW(struct foo);
>
> If you ever change the name of the type you have to search-replace
> these instances. The idomatic C way works well, I don't see a reason
> to use QEMU_NEW().

It works as long as you don't make any mistakes:

f = qemu_malloc(sizeof(*g));
f = qemu_malloc(sizeof(f));

qemu_malloc() returns a void pointer, these are poisonous.

--
error compiling committee.c: too many arguments to function