From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36328) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YNMuX-0006YP-4g for qemu-devel@nongnu.org; Mon, 16 Feb 2015 09:44:38 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YNMuV-00044K-9j for qemu-devel@nongnu.org; Mon, 16 Feb 2015 09:44:33 -0500 Received: from mx1.redhat.com ([209.132.183.28]:41696) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YNMuV-00043k-1r for qemu-devel@nongnu.org; Mon, 16 Feb 2015 09:44:31 -0500 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id t1GEiT4c031404 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Mon, 16 Feb 2015 09:44:30 -0500 From: Markus Armbruster Date: Mon, 16 Feb 2015 15:44:20 +0100 Message-Id: <1424097865-3973-9-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 08/13] QemuOpts: Propagate errors through opts_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 Since I'm touching qemu_opts_parse() anyway, write a function comment for it. Signed-off-by: Markus Armbruster --- util/qemu-option.c | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/util/qemu-option.c b/util/qemu-option.c index 8a0f69e..95f242e 100644 --- a/util/qemu-option.c +++ b/util/qemu-option.c @@ -813,7 +813,7 @@ int qemu_opts_do_parse(QemuOpts *opts, const char *params, const char *firstname } static QemuOpts *opts_parse(QemuOptsList *list, const char *params, - int permit_abbrev, bool defaults) + int permit_abbrev, bool defaults, Error **errp) { const char *firstname; char value[1024], *id = NULL; @@ -842,17 +842,13 @@ static QemuOpts *opts_parse(QemuOptsList *list, const char *params, assert(!defaults || list->merge_lists); opts = qemu_opts_create(list, id, !defaults, &local_err); if (opts == NULL) { - if (local_err) { - qerror_report_err(local_err); - error_free(local_err); - } + error_propagate(errp, local_err); return NULL; } opts_do_parse(opts, params, firstname, defaults, &local_err); if (local_err) { - qerror_report_err(local_err); - error_free(local_err); + error_propagate(errp, local_err); qemu_opts_del(opts); return NULL; } @@ -860,10 +856,25 @@ static QemuOpts *opts_parse(QemuOptsList *list, const char *params, return opts; } +/** + * Create a QemuOpts in @list and with options parsed from @params. + * If @permit_abbrev, the first key=value in @params may omit key=, + * and is treated as if key was @list->implied_opt_name. + * Report errors with qerror_report_err(). + * Return the new QemuOpts on success, null pointer on error. + */ QemuOpts *qemu_opts_parse(QemuOptsList *list, const char *params, int permit_abbrev) { - return opts_parse(list, params, permit_abbrev, false); + Error *err = NULL; + QemuOpts *opts; + + opts = opts_parse(list, params, permit_abbrev, false, &err); + if (!opts) { + qerror_report_err(err); + error_free(err); + } + return opts; } void qemu_opts_set_defaults(QemuOptsList *list, const char *params, @@ -871,7 +882,7 @@ void qemu_opts_set_defaults(QemuOptsList *list, const char *params, { QemuOpts *opts; - opts = opts_parse(list, params, permit_abbrev, true); + opts = opts_parse(list, params, permit_abbrev, true, NULL); assert(opts); } -- 1.9.3