From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Navu6-0005gy-6v for qemu-devel@nongnu.org; Fri, 29 Jan 2010 13:49:14 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Navtz-0005ah-Iu for qemu-devel@nongnu.org; Fri, 29 Jan 2010 13:49:12 -0500 Received: from [199.232.76.173] (port=37788 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Navtz-0005aB-5w for qemu-devel@nongnu.org; Fri, 29 Jan 2010 13:49:07 -0500 Received: from oxygen.pond.sub.org ([213.239.205.148]:53367) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1Navtx-000890-Ir for qemu-devel@nongnu.org; Fri, 29 Jan 2010 13:49:06 -0500 From: Markus Armbruster Date: Fri, 29 Jan 2010 19:48:57 +0100 Message-Id: <1264790942-15045-3-git-send-email-armbru@redhat.com> In-Reply-To: <1264790942-15045-1-git-send-email-armbru@redhat.com> References: <1264790942-15045-1-git-send-email-armbru@redhat.com> Subject: [Qemu-devel] [PATCH 2/7] qdev: Fix exit code for -device ? List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Help was shoehorned into device creation, qdev_device_add(). Since help doesn't create a device, it returns NULL, which looks to callers just like failed device creation. Monitor handler do_device_add() doesn't care, but main() exits unsuccessfully. Move help out of device creation, into new qdev_device_help(). Signed-off-by: Markus Armbruster --- hw/qdev.c | 28 +++++++++++++++++++--------- hw/qdev.h | 1 + vl.c | 8 ++++++++ 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/hw/qdev.c b/hw/qdev.c index c643576..f47f0cb 100644 --- a/hw/qdev.c +++ b/hw/qdev.c @@ -153,6 +153,24 @@ static int set_property(const char *name, const char *value, void *opaque) return 0; } +int qdev_device_help(QemuOpts *opts) +{ + const char *driver; + DeviceInfo *info; + char msg[256]; + + driver = qemu_opt_get(opts, "driver"); + if (driver && !strcmp(driver, "?")) { + for (info = device_info_list; info != NULL; info = info->next) { + qdev_print_devinfo(info, msg, sizeof(msg)); + qemu_error("%s\n", msg); + } + return 1; + } + + return 0; +} + DeviceState *qdev_device_add(QemuOpts *opts) { const char *driver, *path, *id; @@ -165,14 +183,6 @@ DeviceState *qdev_device_add(QemuOpts *opts) qemu_error("-device: no driver specified\n"); return NULL; } - if (strcmp(driver, "?") == 0) { - char msg[256]; - for (info = device_info_list; info != NULL; info = info->next) { - qdev_print_devinfo(info, msg, sizeof(msg)); - qemu_error("%s\n", msg); - } - return NULL; - } /* find driver */ info = qdev_find_info(NULL, driver); @@ -726,7 +736,7 @@ void do_device_add(Monitor *mon, const QDict *qdict) opts = qemu_opts_parse(&qemu_device_opts, qdict_get_str(qdict, "config"), "driver"); - if (opts) + if (opts && !qdev_device_help(opts)) qdev_device_add(opts); } diff --git a/hw/qdev.h b/hw/qdev.h index 07b9603..0eb45b0 100644 --- a/hw/qdev.h +++ b/hw/qdev.h @@ -104,6 +104,7 @@ typedef struct GlobalProperty { /*** Board API. This should go away once we have a machine config file. ***/ DeviceState *qdev_create(BusState *bus, const char *name); +int qdev_device_help(QemuOpts *opts); DeviceState *qdev_device_add(QemuOpts *opts); int qdev_init(DeviceState *dev) QEMU_WARN_UNUSED_RESULT; void qdev_init_nofail(DeviceState *dev); diff --git a/vl.c b/vl.c index 6f1e1ab..39833fc 100644 --- a/vl.c +++ b/vl.c @@ -4459,6 +4459,11 @@ char *qemu_find_file(int type, const char *name) return buf; } +static int device_help_func(QemuOpts *opts, void *opaque) +{ + return qdev_device_help(opts); +} + static int device_init_func(QemuOpts *opts, void *opaque) { DeviceState *dev; @@ -5828,6 +5833,9 @@ int main(int argc, char **argv, char **envp) module_call_init(MODULE_INIT_DEVICE); + if (qemu_opts_foreach(&qemu_device_opts, device_help_func, NULL, 0) != 0) + exit(0); + if (watchdog) { i = select_watchdog(watchdog); if (i > 0) -- 1.6.6