From: Markus Armbruster <armbru@redhat.com>
To: Eric Blake <eblake@redhat.com>
Cc: Kevin Wolf <kwolf@redhat.com>,
qemu-devel@nongnu.org,
"open list:Block layer core" <qemu-block@nongnu.org>,
Gerd Hoffmann <kraxel@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v2 07/19] qapi: Avoid use of 'data' member of qapi unions
Date: Wed, 02 Mar 2016 19:18:43 +0100 [thread overview]
Message-ID: <8737s8hhfg.fsf@blackfin.pond.sub.org> (raw)
In-Reply-To: <1456443528-13901-8-git-send-email-eblake@redhat.com> (Eric Blake's message of "Thu, 25 Feb 2016 16:38:36 -0700")
Eric Blake <eblake@redhat.com> writes:
> qapi code generators currently create a 'void *data' member as
QAPI
> part of the anonymous union embedded in the C struct corresponding
> to a qapi union. However, directly assigning to this member of
QAPI
> the union feels a bit fishy, when we can directly use the rest
Suggest to drop "directly", or perhaps say "when we can assign to
another member
> of the struct instead.
>
> Signed-off-by: Eric Blake <eblake@redhat.com>
> Reviewed-by: Daniel P. Berrange <berrange@redhat.com>
> ---
> v2: add R-b
> v1: no change
> Previously posted as part of qapi cleanup series F:
> v6: rebase to latest
> ---
> blockdev.c | 31 +++++++++++++++++--------------
> ui/input.c | 2 +-
> 2 files changed, 18 insertions(+), 15 deletions(-)
>
> diff --git a/blockdev.c b/blockdev.c
> index d4bc435..0f20c65 100644
> --- a/blockdev.c
> +++ b/blockdev.c
> @@ -1202,15 +1202,11 @@ void hmp_commit(Monitor *mon, const QDict *qdict)
> }
> }
>
> -static void blockdev_do_action(TransactionActionKind type, void *data,
> - Error **errp)
> +static void blockdev_do_action(TransactionAction *action, Error **errp)
> {
> - TransactionAction action;
> TransactionActionList list;
>
> - action.type = type;
> - action.u.data = data;
> - list.value = &action;
> + list.value = action;
> list.next = NULL;
> qmp_transaction(&list, false, NULL, errp);
> }
Here, you avoid use of data by assigning the whole struct instead of its
members.
> @@ -1236,8 +1232,11 @@ void qmp_blockdev_snapshot_sync(bool has_device, const char *device,
> .has_mode = has_mode,
> .mode = mode,
> };
> - blockdev_do_action(TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_SYNC,
> - &snapshot, errp);
> + TransactionAction action = {
> + .type = TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_SYNC,
> + .u.blockdev_snapshot_sync = &snapshot,
> + };
> + blockdev_do_action(&action, errp);
> }
>
However, the call sites become wordier. I guess avoiding type-punning
is worth a bit of verbosity.
> void qmp_blockdev_snapshot(const char *node, const char *overlay,
> @@ -1247,9 +1246,11 @@ void qmp_blockdev_snapshot(const char *node, const char *overlay,
> .node = (char *) node,
> .overlay = (char *) overlay
> };
> -
> - blockdev_do_action(TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT,
> - &snapshot_data, errp);
> + TransactionAction action = {
> + .type = TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT,
> + .u.blockdev_snapshot = &snapshot_data,
> + };
> + blockdev_do_action(&action, errp);
> }
>
> void qmp_blockdev_snapshot_internal_sync(const char *device,
> @@ -1260,9 +1261,11 @@ void qmp_blockdev_snapshot_internal_sync(const char *device,
> .device = (char *) device,
> .name = (char *) name
> };
> -
> - blockdev_do_action(TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_INTERNAL_SYNC,
> - &snapshot, errp);
> + TransactionAction action = {
> + .type = TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_INTERNAL_SYNC,
> + .u.blockdev_snapshot_internal_sync = &snapshot,
> + };
> + blockdev_do_action(&action, errp);
> }
>
> SnapshotInfo *qmp_blockdev_snapshot_delete_internal_sync(const char *device,
> diff --git a/ui/input.c b/ui/input.c
> index e15c618..1e81c25 100644
> --- a/ui/input.c
> +++ b/ui/input.c
> @@ -472,7 +472,7 @@ InputEvent *qemu_input_event_new_move(InputEventKind kind,
> InputMoveEvent *move = g_new0(InputMoveEvent, 1);
>
> evt->type = kind;
> - evt->u.data = move;
> + evt->u.rel = move; /* also would work as evt->u.abs */
> move->axis = axis;
> move->value = value;
> return evt;
Suggest to say /* evt->u.rel is the same as evt.u.abs */
Can't think of a way to build-assert that.
next prev parent reply other threads:[~2016-03-02 18:19 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-25 23:38 [Qemu-devel] [PATCH v2 00/19] easier unboxed visits/qapi implicit types Eric Blake
2016-02-25 23:38 ` [Qemu-devel] [PATCH v2 01/19] qapi: Rename 'fields' to 'members' in internal interface Eric Blake
2016-03-02 17:15 ` Markus Armbruster
2016-03-02 20:05 ` Eric Blake
2016-02-25 23:38 ` [Qemu-devel] [PATCH v2 02/19] qapi-visit: Expose visit_type_FOO_members() Eric Blake
2016-03-02 17:24 ` Markus Armbruster
2016-02-25 23:38 ` [Qemu-devel] [PATCH v2 03/19] qapi: Update docs to match recent generator changes Eric Blake
2016-02-25 23:38 ` [Qemu-devel] [PATCH v2 04/19] chardev: Shorten references into ChardevBackend Eric Blake
2016-03-02 17:55 ` Markus Armbruster
2016-02-25 23:38 ` [Qemu-devel] [PATCH v2 05/19] util: Shorten references into SocketAddress Eric Blake
2016-03-02 18:03 ` Markus Armbruster
2016-02-25 23:38 ` [Qemu-devel] [PATCH v2 06/19] ui: Shorten references into InputEvent Eric Blake
2016-03-01 15:32 ` [Qemu-devel] [PATCH v2.5 " Eric Blake
2016-02-25 23:38 ` [Qemu-devel] [PATCH v2 07/19] qapi: Avoid use of 'data' member of qapi unions Eric Blake
2016-03-02 18:18 ` Markus Armbruster [this message]
2016-02-25 23:38 ` [Qemu-devel] [PATCH v2 08/19] chardev: Drop useless ChardevDummy type Eric Blake
2016-02-25 23:38 ` [Qemu-devel] [PATCH v2 09/19] qapi: Drop useless 'data' member of unions Eric Blake
2016-03-02 18:30 ` Markus Armbruster
2016-02-25 23:38 ` [Qemu-devel] [PATCH v2 10/19] qapi-visit: Factor out gen_visit_members_call() Eric Blake
2016-03-02 18:53 ` Markus Armbruster
2016-02-25 23:38 ` [Qemu-devel] [PATCH v2 11/19] qapi: Add type.is_empty() helper Eric Blake
2016-03-02 19:04 ` Markus Armbruster
2016-03-02 20:16 ` Eric Blake
2016-03-03 7:08 ` Markus Armbruster
2016-03-02 23:04 ` Eric Blake
2016-03-03 7:18 ` Markus Armbruster
2016-02-25 23:38 ` [Qemu-devel] [PATCH v2 12/19] qapi: Fix command with named empty argument type Eric Blake
2016-03-03 8:54 ` Markus Armbruster
2016-02-25 23:38 ` [Qemu-devel] [PATCH v2 13/19] qapi-visit: Simplify visit of empty branch in union Eric Blake
2016-03-03 9:14 ` Markus Armbruster
2016-02-25 23:38 ` [Qemu-devel] [PATCH v2 14/19] qapi: Don't special-case simple union wrappers Eric Blake
2016-03-03 10:59 ` Markus Armbruster
2016-03-03 16:12 ` Eric Blake
2016-02-25 23:38 ` [Qemu-devel] [PATCH v2 15/19] qapi-visit: Move error check into gen_visit_members_call() Eric Blake
2016-03-03 11:56 ` Markus Armbruster
2016-03-04 14:27 ` Eric Blake
2016-02-25 23:38 ` [Qemu-devel] [PATCH v2 16/19] qapi: Allow anonymous base for flat union Eric Blake
2016-03-03 13:04 ` Markus Armbruster
2016-03-04 14:32 ` Eric Blake
2016-02-25 23:38 ` [Qemu-devel] [PATCH v2 17/19] qapi: Use anonymous base in SchemaInfo Eric Blake
2016-03-03 13:06 ` Markus Armbruster
2016-02-25 23:38 ` [Qemu-devel] [PATCH v2 18/19] qapi: Use anonymous base in CpuInfo Eric Blake
2016-03-03 13:08 ` Markus Armbruster
2016-03-04 14:35 ` Eric Blake
2016-02-25 23:38 ` [Qemu-devel] [PATCH v2 19/19] qapi: Make c_type() more OO-like Eric Blake
2016-03-03 13:29 ` Markus Armbruster
2016-03-04 14:37 ` Eric Blake
2016-03-01 15:02 ` [Qemu-devel] [PATCH v2 00/19] easier unboxed visits/qapi implicit types Markus Armbruster
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8737s8hhfg.fsf@blackfin.pond.sub.org \
--to=armbru@redhat.com \
--cc=eblake@redhat.com \
--cc=kraxel@redhat.com \
--cc=kwolf@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.