From nobody Sun Feb 8 23:41:56 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 149192606050565.21145838926498; Tue, 11 Apr 2017 08:54:20 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 04A70804F0; Tue, 11 Apr 2017 15:54:19 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C582D7B552; Tue, 11 Apr 2017 15:54:18 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 7B96918523D1; Tue, 11 Apr 2017 15:54:18 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v3BFs682001638 for ; Tue, 11 Apr 2017 11:54:06 -0400 Received: by smtp.corp.redhat.com (Postfix) id C87027ED9B; Tue, 11 Apr 2017 15:54:06 +0000 (UTC) Received: from angien.brq.redhat.com (dhcp129-47.brq.redhat.com [10.34.129.47]) by smtp.corp.redhat.com (Postfix) with ESMTP id C27A87ED83; Tue, 11 Apr 2017 15:54:05 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 04A70804F0 Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 04A70804F0 From: Peter Krempa To: libvir-list@redhat.com Date: Tue, 11 Apr 2017 17:53:52 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com Cc: Peter Krempa Subject: [libvirt] [PATCH 6/9] virsh: add helpers for getting domain XML for XPath purposes X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Tue, 11 Apr 2017 15:54:19 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" In virsh we quite often get the domain XML just to initialize the XPath parser so that we can extract information. Add helpers which will simplify this by wrapping the getting of the XML and parsing it along with error reporting. Additionally a second helper also gets the domain object from the parameters and releases it so that functions which need the XML as only source of data can be simplified further. --- tools/virsh-util.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ tools/virsh-util.h | 20 ++++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/tools/virsh-util.c b/tools/virsh-util.c index 79a38bb23..4b86e29cb 100644 --- a/tools/virsh-util.c +++ b/tools/virsh-util.c @@ -22,6 +22,7 @@ #include "virfile.h" #include "virstring.h" +#include "viralloc.h" static virDomainPtr virshLookupDomainInternal(vshControl *ctl, @@ -172,3 +173,50 @@ virshDomainSnapshotFree(virDomainSnapshotPtr snap) vshSaveLibvirtHelperError(); virDomainSnapshotFree(snap); /* sc_prohibit_obj_free_apis_in_virsh */ } + + +int +virshDomainGetXMLFromDom(vshControl *ctl, + virDomainPtr dom, + unsigned int flags, + xmlDocPtr *xml, + xmlXPathContextPtr *ctxt) +{ + char *desc =3D NULL; + + if (!(desc =3D virDomainGetXMLDesc(dom, flags))) { + vshError(ctl, _("Failed to get domain description xml")); + return -1; + } + + *xml =3D virXMLParseStringCtxt(desc, _("(domain_definition)"), ctxt); + VIR_FREE(desc); + + if (!(*xml)) { + vshError(ctl, _("Failed to parse domain description xml")); + return -1; + } + + return 0; +} + + +int +virshDomainGetXML(vshControl *ctl, + const vshCmd *cmd, + unsigned int flags, + xmlDocPtr *xml, + xmlXPathContextPtr *ctxt) +{ + virDomainPtr dom; + int ret; + + if (!(dom =3D virshCommandOptDomain(ctl, cmd, NULL))) + return -1; + + ret =3D virshDomainGetXMLFromDom(ctl, dom, flags, xml, ctxt); + + virshDomainFree(dom); + + return ret; +} diff --git a/tools/virsh-util.h b/tools/virsh-util.h index 2b5aedfba..64cef23c0 100644 --- a/tools/virsh-util.h +++ b/tools/virsh-util.h @@ -21,6 +21,8 @@ # include "virsh.h" +# include +# include virDomainPtr virshLookupDomainBy(vshControl *ctl, @@ -55,4 +57,22 @@ virshStreamSink(virStreamPtr st, size_t nbytes, void *opaque); +int +virshDomainGetXMLFromDom(vshControl *ctl, + virDomainPtr dom, + unsigned int flags, + xmlDocPtr *xml, + xmlXPathContextPtr *ctxt) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(4) + ATTRIBUTE_NONNULL(5) ATTRIBUTE_RETURN_CHECK; + +int +virshDomainGetXML(vshControl *ctl, + const vshCmd *cmd, + unsigned int flags, + xmlDocPtr *xml, + xmlXPathContextPtr *ctxt) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(4) + ATTRIBUTE_NONNULL(5) ATTRIBUTE_RETURN_CHECK; + #endif /* VIRSH_UTIL_H */ --=20 2.12.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list