From nobody Wed Apr 16 08:02:48 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1528727951476272.7964075669971; Mon, 11 Jun 2018 07:39:11 -0700 (PDT) Received: from localhost ([::1]:49213 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fSNyQ-0005d2-KV for importer@patchew.org; Mon, 11 Jun 2018 10:39:10 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53109) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fSNmR-0004d2-Qk for qemu-devel@nongnu.org; Mon, 11 Jun 2018 10:26:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fSNmQ-0001n0-Qf for qemu-devel@nongnu.org; Mon, 11 Jun 2018 10:26:47 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:35294 helo=mx1.redhat.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1fSNmN-0001lW-Re; Mon, 11 Jun 2018 10:26:43 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 73F8A8011059; Mon, 11 Jun 2018 14:26:43 +0000 (UTC) Received: from localhost (unknown [10.40.205.155]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 1F0772028672; Mon, 11 Jun 2018 14:26:42 +0000 (UTC) From: Max Reitz To: qemu-block@nongnu.org Date: Mon, 11 Jun 2018 16:25:57 +0200 Message-Id: <20180611142611.6609-16-mreitz@redhat.com> In-Reply-To: <20180611142611.6609-1-mreitz@redhat.com> References: <20180611142611.6609-1-mreitz@redhat.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.8]); Mon, 11 Jun 2018 14:26:43 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.8]); Mon, 11 Jun 2018 14:26:43 +0000 (UTC) for IP:'10.11.54.6' DOMAIN:'int-mx06.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'mreitz@redhat.com' RCPT:'' X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 66.187.233.73 Subject: [Qemu-devel] [PULL 15/29] qemu-io: Exit with error when a command failed X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Peter Maydell , qemu-devel@nongnu.org, Max Reitz Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Currently, qemu-io basically always returns success when it gets to interactive mode (so once the whole command line has been parsed; even before the commands on the command line are interpreted). That is not very useful. This patch makes qemu-io return failure when any of the executed commands failed. Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=3D1519617 Signed-off-by: Max Reitz Reviewed-by: Eric Blake Message-id: 20180509194302.21585-4-mreitz@redhat.com Signed-off-by: Max Reitz --- qemu-io.c | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/qemu-io.c b/qemu-io.c index ec6683803f..13829f5e21 100644 --- a/qemu-io.c +++ b/qemu-io.c @@ -400,17 +400,21 @@ static void prep_fetchline(void *opaque) *fetchable=3D 1; } =20 -static void command_loop(void) +static int command_loop(void) { int i, fetchable =3D 0, prompted =3D 0; + int ret, last_error =3D 0; char *input; =20 for (i =3D 0; !quit_qemu_io && i < ncmdline; i++) { - qemuio_command(qemuio_blk, cmdline[i]); + ret =3D qemuio_command(qemuio_blk, cmdline[i]); + if (ret < 0) { + last_error =3D ret; + } } if (cmdline) { g_free(cmdline); - return; + return last_error; } =20 while (!quit_qemu_io) { @@ -431,13 +435,19 @@ static void command_loop(void) if (input =3D=3D NULL) { break; } - qemuio_command(qemuio_blk, input); + ret =3D qemuio_command(qemuio_blk, input); g_free(input); =20 + if (ret < 0) { + last_error =3D ret; + } + prompted =3D 0; fetchable =3D 0; } qemu_set_fd_handler(STDIN_FILENO, NULL, NULL, NULL); + + return last_error; } =20 static void add_user_command(char *optarg) @@ -502,6 +512,7 @@ int main(int argc, char **argv) int c; int opt_index =3D 0; int flags =3D BDRV_O_UNMAP; + int ret; bool writethrough =3D true; Error *local_error =3D NULL; QDict *opts =3D NULL; @@ -663,7 +674,7 @@ int main(int argc, char **argv) } } } - command_loop(); + ret =3D command_loop(); =20 /* * Make sure all outstanding requests complete before the program exit= s. @@ -672,5 +683,10 @@ int main(int argc, char **argv) =20 blk_unref(qemuio_blk); g_free(readline_state); - return 0; + + if (ret < 0) { + return 1; + } else { + return 0; + } } --=20 2.17.1