[libvirt] [libvirt-glib 1/3] Add gvir_config_object_new{_from_xml} helpers

Marc-André Lureau marcandre.lureau at gmail.com
Wed Nov 9 20:58:22 UTC 2011


ack

On Wed, Nov 9, 2011 at 9:48 PM, Christophe Fergeau <cfergeau at redhat.com> wrote:
> This factors the code that is repeated in the _new methods of
> all classes deriving from GVirObject
> ---
>  libvirt-gconfig/libvirt-gconfig-domain.c |   26 ++++++++++--------------
>  libvirt-gconfig/libvirt-gconfig-object.c |   31 ++++++++++++++++++++++++++++++
>  libvirt-gconfig/libvirt-gconfig-object.h |    8 +++++++
>  libvirt-gconfig/libvirt-gconfig.sym      |    1 +
>  4 files changed, 51 insertions(+), 15 deletions(-)
>
> diff --git a/libvirt-gconfig/libvirt-gconfig-domain.c b/libvirt-gconfig/libvirt-gconfig-domain.c
> index 837287c..3290389 100644
> --- a/libvirt-gconfig/libvirt-gconfig-domain.c
> +++ b/libvirt-gconfig/libvirt-gconfig-domain.c
> @@ -147,27 +147,23 @@ static void gvir_config_domain_init(GVirConfigDomain *conn)
>  GVirConfigDomain *gvir_config_domain_new_from_xml(const gchar *xml,
>                                                   GError **error)
>  {
> -    xmlNodePtr node;
> +    GVirConfigObject *object;
>
> -    node = gvir_config_xml_parse(xml, "domain", error);
> -    if ((error != NULL) && (*error != NULL))
> -        return NULL;
> -    return GVIR_CONFIG_DOMAIN(g_object_new(GVIR_TYPE_CONFIG_DOMAIN,
> -                                           "node", node,
> -                                           "schema", DATADIR "/libvirt/schemas/domain.rng",
> -                                           NULL));
> +    object = gvir_config_object_new_from_xml(GVIR_TYPE_CONFIG_DOMAIN,
> +                                             "domain",
> +                                             DATADIR "/libvirt/schemas/domain.rng",
> +                                             xml, error);
> +    return GVIR_CONFIG_DOMAIN(object);
>  }
>
>  GVirConfigDomain *gvir_config_domain_new(void)
>  {
> -    xmlDocPtr doc;
> +    GVirConfigObject *object;
>
> -    doc = xmlNewDoc((xmlChar *)"1.0");
> -    doc->children = xmlNewDocNode(doc, NULL, (xmlChar *)"domain", NULL);
> -    return GVIR_CONFIG_DOMAIN(g_object_new(GVIR_TYPE_CONFIG_DOMAIN,
> -                                           "node", doc->children,
> -                                           "schema", DATADIR "/libvirt/schemas/domain.rng",
> -                                           NULL));
> +    object = gvir_config_object_new(GVIR_TYPE_CONFIG_DOMAIN,
> +                                    "domain",
> +                                    DATADIR "/libvirt/schemas/domain.rng");
> +    return GVIR_CONFIG_DOMAIN(object);
>  }
>
>  char *gvir_config_domain_get_name(GVirConfigDomain *domain)
> diff --git a/libvirt-gconfig/libvirt-gconfig-object.c b/libvirt-gconfig/libvirt-gconfig-object.c
> index e59cbcd..adbd955 100644
> --- a/libvirt-gconfig/libvirt-gconfig-object.c
> +++ b/libvirt-gconfig/libvirt-gconfig-object.c
> @@ -355,3 +355,34 @@ void gvir_config_object_set_node_content_uint64(GVirConfigObject *object,
>     gvir_config_object_set_node_content(object, node_name, str);
>     g_free(str);
>  }
> +
> +GVirConfigObject *gvir_config_object_new_from_xml(GType type,
> +                                                  const char *root_name,
> +                                                  const char *schema,
> +                                                  const gchar *xml,
> +                                                  GError **error)
> +{
> +    xmlNodePtr node;
> +
> +    node = gvir_config_xml_parse(xml, root_name, error);
> +    if ((error != NULL) && (*error != NULL))
> +        return NULL;
> +    return GVIR_CONFIG_OBJECT(g_object_new(type,
> +                                           "node", node,
> +                                           "schema", schema,
> +                                           NULL));
> +}
> +
> +GVirConfigObject *gvir_config_object_new(GType type,
> +                                         const char *root_name,
> +                                         const char *schema)
> +{
> +    xmlDocPtr doc;
> +
> +    doc = xmlNewDoc((xmlChar *)"1.0");
> +    doc->children = xmlNewDocNode(doc, NULL, (xmlChar *)root_name, NULL);
> +    return GVIR_CONFIG_OBJECT(g_object_new(type,
> +                                           "node", doc->children,
> +                                           "schema", schema,
> +                                           NULL));
> +}
> diff --git a/libvirt-gconfig/libvirt-gconfig-object.h b/libvirt-gconfig/libvirt-gconfig-object.h
> index c203798..52e4525 100644
> --- a/libvirt-gconfig/libvirt-gconfig-object.h
> +++ b/libvirt-gconfig/libvirt-gconfig-object.h
> @@ -59,6 +59,14 @@ struct _GVirConfigObjectClass
>
>  GType gvir_config_object_get_type(void);
>
> +GVirConfigObject *gvir_config_object_new(GType type,
> +                                         const char *root_name,
> +                                         const char *schema);
> +GVirConfigObject *gvir_config_object_new_from_xml(GType type,
> +                                                  const char *root_name,
> +                                                  const char *schema,
> +                                                  const gchar *xml,
> +                                                  GError **error);
>  void gvir_config_object_validate(GVirConfigObject *config,
>                                  GError **err);
>
> diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym
> index 951aac6..31a89d2 100644
> --- a/libvirt-gconfig/libvirt-gconfig.sym
> +++ b/libvirt-gconfig/libvirt-gconfig.sym
> @@ -31,6 +31,7 @@ LIBVIRT_GOBJECT_0.0.1 {
>        gvir_config_object_get_type;
>        gvir_config_object_error_quark;
>        gvir_config_object_new;
> +       gvir_config_object_new_from_xml;
>        gvir_config_object_get_schema;
>        gvir_config_object_get_xml_node;
>        gvir_config_object_to_xml;
> --
> 1.7.7
>
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
>



-- 
Marc-André Lureau




More information about the libvir-list mailing list