qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 2/3] qobject: assume base of a qobject is at off


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [PATCH 2/3] qobject: assume base of a qobject is at offset 0
Date: Wed, 21 Mar 2018 15:01:39 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0

On 21/03/2018 14:40, Marc-André Lureau wrote:
> +/* A typecast, checking for the type of arguments */
> +/* QObject is at offset 0, for all QObject-derived types */
> +#define QOBJECT(x) QEMU_GENERIC(x,              \
> +    (QNull *, (QObject *) x),                   \
> +    (const QNull *, (const QObject *) x),       \
> +    (QNum *, (QObject *) x),                    \
> +    (const QNum *, (const QObject *) x),        \
> +    (QString *, (QObject *) x),                 \
> +    (const QString *, (const QObject *) x),     \
> +    (QDict *, (QObject *) x),                   \
> +    (const QDict *, (const QObject *) x),       \
> +    (QList *, (QObject *) x),                   \
> +    (const QList *, (const QObject *) x),       \
> +    (QBool *, (QObject *) x),                   \
> +    (const QBool *, (const QObject *) x),       \
> +    (QObject *, x),                             \
> +    (const QObject *, x),                       \
> +    qobject_unknown_type(x))

Why not just

        QEMU_GENERIC(x,
                (QObject *, x),
                (const QObject *, x),
                ({ \
                        QEMU_BUILD_BUG_ON(offsetof(typeof(*x), base));
                        &(x)->base;
                }))

That is just an extension of what was being done before, and it is
resilient against people putting a random "QObject base" in the middle
of a struct.

Paolo



reply via email to

[Prev in Thread] Current Thread [Next in Thread]