From patchwork Wed Jul 17 09:29:40 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Robert Wang X-Patchwork-Id: 259636 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 827592C0097 for ; Wed, 17 Jul 2013 19:31:00 +1000 (EST) Received: from localhost ([::1]:35069 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UzO4X-0000bB-Su for incoming@patchwork.ozlabs.org; Wed, 17 Jul 2013 05:30:57 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53347) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UzO3u-0000ay-Oo for qemu-devel@nongnu.org; Wed, 17 Jul 2013 05:30:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UzO3r-0003Ic-6l for qemu-devel@nongnu.org; Wed, 17 Jul 2013 05:30:18 -0400 Received: from mail-pd0-x235.google.com ([2607:f8b0:400e:c02::235]:37801) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UzO3q-0003Fp-Ru for qemu-devel@nongnu.org; Wed, 17 Jul 2013 05:30:15 -0400 Received: by mail-pd0-f181.google.com with SMTP id 14so1627110pdj.40 for ; Wed, 17 Jul 2013 02:30:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:x-mailer:in-reply-to :references; bh=ewi5J6/9Sft4RU/Y6R6Pi2iHV2QCtZRfs7DHU/vAFC4=; b=dLXlx7+I6i7bvDO0H0r3dPsz+k4hai2m4HJUhgGlTkVsLt40OPdB2ZuK2vC9Eafo1U qISNJOyggjDqMoS7SU1En+wZrzlTdTEPil8eCUo2dxFTFMB/yskONvZMJUu5gPnLS+w8 fbuqFHriUAXc6L/gmUP0/rW3UGJeA/rITFuum44EzYuBsJjeDf8GeMk8X5x9DvLiwH/4 M3V0IXSFDiHk+HNCCzWQFq63FDfYCifzHC1BIFG9T9Pb/OEPBpPOAqv+Dgsy1aHTVgz+ XuU/svlcTVuCC+Ocd7UcSL1EtWATjAdinURPRDuJ/QwS+ZZRuwS+ssVAMv4r3CIXS4+b vavA== X-Received: by 10.66.122.131 with SMTP id ls3mr7047550pab.2.1374053414102; Wed, 17 Jul 2013 02:30:14 -0700 (PDT) Received: from 11.wdongxu.kvm58 ([202.108.130.153]) by mx.google.com with ESMTPSA id ie3sm6850075pbc.13.2013.07.17.02.30.11 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Wed, 17 Jul 2013 02:30:13 -0700 (PDT) From: Dong Xu Wang To: qemu-devel@nongnu.org Date: Wed, 17 Jul 2013 17:29:40 +0800 Message-Id: <1374053388-17431-2-git-send-email-wdongxu@linux.vnet.ibm.com> X-Mailer: git-send-email 1.7.11.7 In-Reply-To: <1374053388-17431-1-git-send-email-wdongxu@linux.vnet.ibm.com> References: <1374053388-17431-1-git-send-email-wdongxu@linux.vnet.ibm.com> X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2607:f8b0:400e:c02::235 Cc: kwolf@redhat.com, wdongxu@cn.ibm.com, stefanha@redhat.com, Dong Xu Wang Subject: [Qemu-devel] [PATCH V17 1/9] qemu-option: add def_value_str in QemuOptDesc struct and rewrite qemu_opts_print X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org qemu_opts_print has no user now, so can re-write the function safely. qemu_opts_print is used while using "qemu-img create", it produces the same output as previous code. The behavior of this function has changed: 1. Print every possible option, whether a value has been set or not. 2. Option descriptors may provide a default value. 3. Print to stdout instead of stderr. Previously the behavior was to print every option that has been set. Options that have not been set would be skipped. Reviewed-by: Eric Blake Signed-off-by: Dong Xu Wang --- v13->v14: 1) fix memory leak. 2) make opt_set do not accpet null value argument. v12->v13 1) re-write commit message. v11->v12 1) make def_value_str become the real default value string in opt_set function. v10->v11: 1) print all values that have actually been assigned while accept-any cases. v7->v8: 1) print "elements => accept any params" while opts_accepts_any() == true. 2) since def_print_str is the default value if an option isn't set, so rename it to def_value_str. include/qemu/option.h | 3 ++- util/qemu-option.c | 32 ++++++++++++++++++++++++++------ 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/include/qemu/option.h b/include/qemu/option.h index a83c700..0207209 100644 --- a/include/qemu/option.h +++ b/include/qemu/option.h @@ -94,6 +94,7 @@ typedef struct QemuOptDesc { const char *name; enum QemuOptType type; const char *help; + const char *def_value_str; } QemuOptDesc; struct QemuOptsList { @@ -150,7 +151,7 @@ QDict *qemu_opts_to_qdict(QemuOpts *opts, QDict *qdict); void qemu_opts_absorb_qdict(QemuOpts *opts, QDict *qdict, Error **errp); typedef int (*qemu_opts_loopfunc)(QemuOpts *opts, void *opaque); -int qemu_opts_print(QemuOpts *opts, void *dummy); +int qemu_opts_print(QemuOpts *opts); int qemu_opts_foreach(QemuOptsList *list, qemu_opts_loopfunc func, void *opaque, int abort_on_failure); diff --git a/util/qemu-option.c b/util/qemu-option.c index e0ef426..be5dfaa 100644 --- a/util/qemu-option.c +++ b/util/qemu-option.c @@ -826,16 +826,36 @@ void qemu_opts_del(QemuOpts *opts) g_free(opts); } -int qemu_opts_print(QemuOpts *opts, void *dummy) +int qemu_opts_print(QemuOpts *opts) { QemuOpt *opt; + QemuOptDesc *desc = opts->list->desc; - fprintf(stderr, "%s: %s:", opts->list->name, - opts->id ? opts->id : ""); - QTAILQ_FOREACH(opt, &opts->head, next) { - fprintf(stderr, " %s=\"%s\"", opt->name, opt->str); + if (desc[0].name == NULL) { + QTAILQ_FOREACH(opt, &opts->head, next) { + printf("%s=\"%s\" ", opt->name, opt->str); + } + return 0; + } + for (; desc && desc->name; desc++) { + const char *value = desc->def_value_str; + QemuOpt *opt; + + opt = qemu_opt_find(opts, desc->name); + if (opt) { + value = opt->str; + } + + if (!value) { + continue; + } + + if (desc->type == QEMU_OPT_STRING) { + printf("%s='%s' ", desc->name, value); + } else { + printf("%s=%s ", desc->name, value); + } } - fprintf(stderr, "\n"); return 0; }