From patchwork Thu Feb 11 01:50:01 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luiz Capitulino X-Patchwork-Id: 45096 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id D93DAB7C8E for ; Thu, 11 Feb 2010 13:22:35 +1100 (EST) Received: from localhost ([127.0.0.1]:36434 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NfOeD-0000V7-9m for incoming@patchwork.ozlabs.org; Wed, 10 Feb 2010 21:19:17 -0500 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NfOCo-0007F4-Fy for qemu-devel@nongnu.org; Wed, 10 Feb 2010 20:50:58 -0500 Received: from [199.232.76.173] (port=57753 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NfOCo-0007EU-0R for qemu-devel@nongnu.org; Wed, 10 Feb 2010 20:50:58 -0500 Received: from Debian-exim by monty-python.gnu.org with spam-scanned (Exim 4.60) (envelope-from ) id 1NfOCl-0001K8-R8 for qemu-devel@nongnu.org; Wed, 10 Feb 2010 20:50:57 -0500 Received: from mx1.redhat.com ([209.132.183.28]:11765) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NfOCl-0001K0-Ce for qemu-devel@nongnu.org; Wed, 10 Feb 2010 20:50:55 -0500 Received: from int-mx05.intmail.prod.int.phx2.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.18]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o1B1os0X009053 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 10 Feb 2010 20:50:54 -0500 Received: from localhost (vpn-10-105.rdu.redhat.com [10.11.10.105]) by int-mx05.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id o1B1orbD014609; Wed, 10 Feb 2010 20:50:54 -0500 From: Luiz Capitulino To: qemu-devel@nongnu.org Date: Wed, 10 Feb 2010 23:50:01 -0200 Message-Id: <1265853007-27300-16-git-send-email-lcapitulino@redhat.com> In-Reply-To: <1265853007-27300-1-git-send-email-lcapitulino@redhat.com> References: <1265853007-27300-1-git-send-email-lcapitulino@redhat.com> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.18 X-detected-operating-system: by monty-python.gnu.org: Genre and OS details not recognized. Cc: armbru@redhat.com Subject: [Qemu-devel] [PATCH 15/21] Monitor: Convert do_change() to cmd_new_ret() X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Not that trivial as the call chain also has to be modified. Signed-off-by: Luiz Capitulino --- monitor.c | 60 ++++++++++++++++++++++++++++++++++-------------------- monitor.h | 6 ++-- qemu-monitor.hx | 2 +- 3 files changed, 42 insertions(+), 26 deletions(-) diff --git a/monitor.c b/monitor.c index baedc34..37a2a48 100644 --- a/monitor.c +++ b/monitor.c @@ -1027,8 +1027,8 @@ static int do_block_set_passwd(Monitor *mon, const QDict *qdict, return 0; } -static void do_change_block(Monitor *mon, const char *device, - const char *filename, const char *fmt) +static int do_change_block(Monitor *mon, const char *device, + const char *filename, const char *fmt) { BlockDriverState *bs; BlockDriver *drv = NULL; @@ -1036,26 +1036,32 @@ static void do_change_block(Monitor *mon, const char *device, bs = bdrv_find(device); if (!bs) { qemu_error_new(QERR_DEVICE_NOT_FOUND, device); - return; + return -1; } if (fmt) { drv = bdrv_find_whitelisted_format(fmt); if (!drv) { qemu_error_new(QERR_INVALID_BLOCK_FORMAT, fmt); - return; + return -1; } } - if (eject_device(mon, bs, 0) < 0) - return; - bdrv_open2(bs, filename, BDRV_O_RDWR, drv); - monitor_read_bdrv_key_start(mon, bs, NULL, NULL); + if (eject_device(mon, bs, 0) < 0) { + return -1; + } + if (bdrv_open2(bs, filename, BDRV_O_RDWR, drv) < 0) { + return -1; + } + return monitor_read_bdrv_key_start(mon, bs, NULL, NULL); } -static void change_vnc_password(const char *password) +static int change_vnc_password(const char *password) { - if (vnc_display_password(NULL, password) < 0) + if (vnc_display_password(NULL, password) < 0) { qemu_error_new(QERR_SET_PASSWD_FAILED); + return -1; + } + return 0; } static void change_vnc_password_cb(Monitor *mon, const char *password, @@ -1065,7 +1071,7 @@ static void change_vnc_password_cb(Monitor *mon, const char *password, monitor_read_command(mon, 1); } -static void do_change_vnc(Monitor *mon, const char *target, const char *arg) +static int do_change_vnc(Monitor *mon, const char *target, const char *arg) { if (strcmp(target, "passwd") == 0 || strcmp(target, "password") == 0) { @@ -1073,29 +1079,37 @@ static void do_change_vnc(Monitor *mon, const char *target, const char *arg) char password[9]; strncpy(password, arg, sizeof(password)); password[sizeof(password) - 1] = '\0'; - change_vnc_password(password); + return change_vnc_password(password); } else { - monitor_read_password(mon, change_vnc_password_cb, NULL); + return monitor_read_password(mon, change_vnc_password_cb, NULL); } } else { - if (vnc_display_open(NULL, target) < 0) + if (vnc_display_open(NULL, target) < 0) { qemu_error_new(QERR_VNC_SERVER_FAILED, target); + return -1; + } } + + return 0; } /** * do_change(): Change a removable medium, or VNC configuration */ -static void do_change(Monitor *mon, const QDict *qdict, QObject **ret_data) +static int do_change(Monitor *mon, const QDict *qdict, QObject **ret_data) { const char *device = qdict_get_str(qdict, "device"); const char *target = qdict_get_str(qdict, "target"); const char *arg = qdict_get_try_str(qdict, "arg"); + int ret; + if (strcmp(device, "vnc") == 0) { - do_change_vnc(mon, target, arg); + ret = do_change_vnc(mon, target, arg); } else { - do_change_block(mon, device, target, arg); + ret = do_change_block(mon, device, target, arg); } + + return ret; } static void do_screen_dump(Monitor *mon, const QDict *qdict) @@ -4554,21 +4568,21 @@ static void bdrv_password_cb(Monitor *mon, const char *password, void *opaque) monitor_read_command(mon, 1); } -void monitor_read_bdrv_key_start(Monitor *mon, BlockDriverState *bs, - BlockDriverCompletionFunc *completion_cb, - void *opaque) +int monitor_read_bdrv_key_start(Monitor *mon, BlockDriverState *bs, + BlockDriverCompletionFunc *completion_cb, + void *opaque) { int err; if (!bdrv_key_required(bs)) { if (completion_cb) completion_cb(opaque, 0); - return; + return 0; } if (monitor_ctrl_mode(mon)) { qemu_error_new(QERR_DEVICE_ENCRYPTED, bdrv_get_device_name(bs)); - return; + return -1; } monitor_printf(mon, "%s (%s) is encrypted.\n", bdrv_get_device_name(bs), @@ -4581,6 +4595,8 @@ void monitor_read_bdrv_key_start(Monitor *mon, BlockDriverState *bs, if (err && completion_cb) completion_cb(opaque, err); + + return err; } typedef struct QemuErrorSink QemuErrorSink; diff --git a/monitor.h b/monitor.h index e35f1e4..fc09505 100644 --- a/monitor.h +++ b/monitor.h @@ -33,9 +33,9 @@ void monitor_init(CharDriverState *chr, int flags); int monitor_suspend(Monitor *mon); void monitor_resume(Monitor *mon); -void monitor_read_bdrv_key_start(Monitor *mon, BlockDriverState *bs, - BlockDriverCompletionFunc *completion_cb, - void *opaque); +int monitor_read_bdrv_key_start(Monitor *mon, BlockDriverState *bs, + BlockDriverCompletionFunc *completion_cb, + void *opaque); int monitor_get_fd(Monitor *mon, const char *fdname); diff --git a/qemu-monitor.hx b/qemu-monitor.hx index 7bfb8d0..d5b344e 100644 --- a/qemu-monitor.hx +++ b/qemu-monitor.hx @@ -153,7 +153,7 @@ ETEXI .params = "device filename [format]", .help = "change a removable medium, optional format", .user_print = monitor_user_noop, - .mhandler.cmd_new = do_change, + .cmd_new_ret = do_change, }, STEXI