On Tue, Jul 17, 2012 at 3:17 PM, Laszlo Ersek <ler...@redhat.com> wrote: > The first two patches clean up error propagation and enable the release of > incompletely parsed/created objects. A new test case is added as well. > > Inspired by [1], patches 3-6 add a new visitor that should simplify > defining and processing command line options. For a more detailed > description, please see "[PATCH v3 06/18] qapi: introduce OptsVisitor". > > The rest converts -net/-netdev parsing to the new visitor. > > v1->v2: > - Insert a small patch between v1 01/16 and v1 02/16 in order to generate > C types for fixed-width integers. > - Tighten / clean up integer types in Netdev options and in OptsVisitor. > - NetLegacy::name is optional. > - Changes are marked below individually and described separately. > - (Rebase to current master.) > > v2->v3: > - Instead of examining, assert that we never overwrite errors with > error_set(). > - Allow visitors to set a NULL struct pointer successfully, so traversal > of incomplete objects can continue. > - Check for a NULL "obj" before accessing "(*obj)->has_XXX" (this is not a > typo, "obj != NULL" implies "*obj != NULL" here). > - Fix start_struct / end_struct balance for unions as well. > - Add test case for deallocating traversal of incomplete structure. > - Factor opts_visitor_insert() out of opts_start_struct() and call it > separately for opts_root->id if there's any. > - Don't require non-negative values in opts_type_int()'s error message. > - g_malloc0() may return NULL for zero-sized requests. Support empty > structures by requesting 1 byte for them instead. > - NetLegacy::id is allowed and takes precedence over NetLegacy::name. > - Replace "@traits" with "@opts" in NetLegacy & Netdev descriptions. > - Keep "qemu-option.h" included in "net/slirp.h". > > [1] http://lists.nongnu.org/archive/html/qemu-devel/2012-04/msg02512.html > > Laszlo Ersek (17): > qapi: add test case for deallocating traversal of incomplete structure [new] > qapi: generate C types for fixed-width integers > qapi: introduce "size" type > expose QemuOpt and QemuOpts struct definitions to interested parties > qapi: introduce OptsVisitor [v3] > qapi schema: remove trailing whitespace > qapi schema: add Netdev types [v3] > hw, net: "net_client_type" -> "NetClientOptionsKind" (qapi-generated) > convert net_client_init() to OptsVisitor [v3] > convert net_init_nic() to NetClientOptions > convert net_init_dump() to NetClientOptions > convert net_init_slirp() to NetClientOptions > convert net_init_socket() to NetClientOptions > convert net_init_vde() to NetClientOptions > convert net_init_tap() to NetClientOptions > convert net_init_bridge() to NetClientOptions > remove unused QemuOpts parameter from net init functions [v3] > > Paolo Bonzini (1): > qapi: fix error propagation [v3] > > error.h | 2 +- > net.h | 16 +-- > net/dump.h | 5 +- > net/slirp.h | 4 +- > net/socket.h | 5 +- > net/tap.h | 10 +- > net/vde.h | 5 +- > qapi/opts-visitor.h | 31 +++ > qapi/qapi-visit-core.h | 3 + > qemu-option-internal.h | 53 +++++ > error.c | 3 +- > hw/cadence_gem.c | 2 +- > hw/dp8393x.c | 2 +- > hw/e1000.c | 2 +- > hw/eepro100.c | 2 +- > hw/etraxfs_eth.c | 2 +- > hw/lan9118.c | 2 +- > hw/lance.c | 2 +- > hw/mcf_fec.c | 2 +- > hw/milkymist-minimac2.c | 2 +- > hw/mipsnet.c | 2 +- > hw/musicpal.c | 2 +- > hw/ne2000-isa.c | 2 +- > hw/ne2000.c | 2 +- > hw/opencores_eth.c | 2 +- > hw/pcnet-pci.c | 2 +- > hw/rtl8139.c | 2 +- > hw/smc91c111.c | 2 +- > hw/spapr_llan.c | 2 +- > hw/stellaris_enet.c | 2 +- > hw/usb/dev-network.c | 2 +- > hw/vhost_net.c | 2 +- > hw/virtio-net.c | 10 +- > hw/xen_nic.c | 2 +- > hw/xgmac.c | 2 +- > hw/xilinx_axienet.c | 2 +- > hw/xilinx_ethlite.c | 2 +- > net.c | 494 > +++++++++++----------------------------- > net/dump.c | 24 ++- > net/slirp.c | 96 +++------ > net/socket.c | 124 ++++------- > net/tap-aix.c | 2 +- > net/tap-bsd.c | 2 +- > net/tap-haiku.c | 2 +- > net/tap-linux.c | 9 +- > net/tap-solaris.c | 2 +- > net/tap-win32.c | 14 +- > net/tap.c | 152 ++++++------ > net/vde.c | 20 +- > qapi/opts-visitor.c | 427 ++++++++++++++++++++++++++++++++++ > qapi/qapi-visit-core.c | 17 +- > qemu-option.c | 24 +-- > tests/test-qmp-commands.c | 42 ++++ > tests/test-qmp-input-visitor.c | 24 ++- > docs/qapi-code-gen.txt | 2 + > qapi-schema.json | 288 +++++++++++++++++++++++- > qapi/Makefile.objs | 2 +- > scripts/qapi-visit.py | 150 ++++++++----- > scripts/qapi.py | 6 + > 59 files changed, 1350 insertions(+), 770 deletions(-) > create mode 100644 qapi/opts-visitor.h > create mode 100644 qemu-option-internal.h > create mode 100644 qapi/opts-visitor.c
Checked that -netdev options still work for user and socket. Tested-by: Stefan Hajnoczi <stefa...@linux.vnet.ibm.com>