From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36403) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YNMua-0006fj-QB for qemu-devel@nongnu.org; Mon, 16 Feb 2015 09:44:41 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YNMuU-00043X-LN for qemu-devel@nongnu.org; Mon, 16 Feb 2015 09:44:36 -0500 Received: from mx1.redhat.com ([209.132.183.28]:44469) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YNMuU-000439-DV for qemu-devel@nongnu.org; Mon, 16 Feb 2015 09:44:30 -0500 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id t1GEiTkV002915 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Mon, 16 Feb 2015 09:44:29 -0500 From: Markus Armbruster Date: Mon, 16 Feb 2015 15:44:19 +0100 Message-Id: <1424097865-3973-8-git-send-email-armbru@redhat.com> In-Reply-To: <1424097865-3973-1-git-send-email-armbru@redhat.com> References: <1424097865-3973-1-git-send-email-armbru@redhat.com> Subject: [Qemu-devel] [PATCH 07/13] QemuOpts: Propagate errors through opts_do_parse() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com, kraxel@redhat.com, stefanha@redhat.com Signed-off-by: Markus Armbruster --- util/qemu-option.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/util/qemu-option.c b/util/qemu-option.c index 928b86f..8a0f69e 100644 --- a/util/qemu-option.c +++ b/util/qemu-option.c @@ -750,8 +750,8 @@ void qemu_opts_print(QemuOpts *opts, const char *sep) } } -static int opts_do_parse(QemuOpts *opts, const char *params, - const char *firstname, bool prepend) +static void opts_do_parse(QemuOpts *opts, const char *params, + const char *firstname, bool prepend, Error **errp) { char option[128], value[1024]; const char *p,*pe,*pc; @@ -789,21 +789,27 @@ static int opts_do_parse(QemuOpts *opts, const char *params, /* store and parse */ opt_set(opts, option, value, prepend, &local_err); if (local_err) { - qerror_report_err(local_err); - error_free(local_err); - return -1; + error_propagate(errp, local_err); + return; } } if (*p != ',') { break; } } - return 0; } int qemu_opts_do_parse(QemuOpts *opts, const char *params, const char *firstname) { - return opts_do_parse(opts, params, firstname, false); + Error *err = NULL; + + opts_do_parse(opts, params, firstname, false, &err); + if (err) { + qerror_report_err(err); + error_free(err); + return -1; + } + return 0; } static QemuOpts *opts_parse(QemuOptsList *list, const char *params, @@ -843,7 +849,10 @@ static QemuOpts *opts_parse(QemuOptsList *list, const char *params, return NULL; } - if (opts_do_parse(opts, params, firstname, defaults) != 0) { + opts_do_parse(opts, params, firstname, defaults, &local_err); + if (local_err) { + qerror_report_err(local_err); + error_free(local_err); qemu_opts_del(opts); return NULL; } -- 1.9.3