[libvirt] [libvirt-glib 3/4] Allow unsetting of string & object properties

Christophe Fergeau cfergeau at redhat.com
Fri May 4 09:22:20 UTC 2012


On Fri, May 04, 2012 at 03:07:44AM +0300, Zeeshan Ali (Khattak) wrote:
> From: "Zeeshan Ali (Khattak)" <zeeshanak at gnome.org>
> 
> Passing a 'NULL' value now deletes the corresponding node/tree.
> ---
>  .../libvirt-gconfig-domain-chardev-source-pty.c    |    6 ++
>  .../libvirt-gconfig-domain-controller.c            |   14 ++++-
>  libvirt-gconfig/libvirt-gconfig-domain-os.c        |   20 +++++++
>  libvirt-gconfig/libvirt-gconfig-domain-redirdev.c  |   14 ++++-
>  libvirt-gconfig/libvirt-gconfig-domain-seclabel.c  |    8 +++
>  libvirt-gconfig/libvirt-gconfig-domain.c           |   54 ++++++++++++++++---
>  libvirt-gconfig/libvirt-gconfig-object.c           |    7 ++-
>  .../libvirt-gconfig-storage-permissions.c          |    4 ++
>  .../libvirt-gconfig-storage-pool-source.c          |    4 ++
>  .../libvirt-gconfig-storage-pool-target.c          |   18 ++++++-
>  libvirt-gconfig/libvirt-gconfig-storage-pool.c     |   36 +++++++++++--
>  .../libvirt-gconfig-storage-vol-backing-store.c    |    4 ++
>  .../libvirt-gconfig-storage-vol-target.c           |   14 ++++-
>  libvirt-gconfig/libvirt-gconfig-storage-vol.c      |   32 +++++++++--
>  14 files changed, 201 insertions(+), 34 deletions(-)
> 
> diff --git a/libvirt-gconfig/libvirt-gconfig-domain-chardev-source-pty.c b/libvirt-gconfig/libvirt-gconfig-domain-chardev-source-pty.c
> index ad47bc4..fd08584 100644
> --- a/libvirt-gconfig/libvirt-gconfig-domain-chardev-source-pty.c
> +++ b/libvirt-gconfig/libvirt-gconfig-domain-chardev-source-pty.c
> @@ -85,6 +85,12 @@ void gvir_config_domain_source_pty_set_path(GVirConfigDomainChardevSourcePty *pt
>      GVirConfigObject *source;
>      g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_CHARDEV_SOURCE_PTY(pty));
>  
> +    if (path == NULL) {
> +        gvir_config_object_delete_child(GVIR_CONFIG_OBJECT(pty), "source", NULL);
> +
> +        return;
> +    }
> +
>      source = gvir_config_object_replace_child(GVIR_CONFIG_OBJECT(pty),
>                                                "source");

_set_path looks buggy before your changes: we want to generate
<source path="foo">, and this code would generate
<source><path>foo</path></source> if I'm not mistaken.

>      g_return_if_fail(GVIR_CONFIG_IS_OBJECT(source));
> diff --git a/libvirt-gconfig/libvirt-gconfig-domain-controller.c b/libvirt-gconfig/libvirt-gconfig-domain-controller.c
> index 2024b54..25de002 100644
> --- a/libvirt-gconfig/libvirt-gconfig-domain-controller.c
> +++ b/libvirt-gconfig/libvirt-gconfig-domain-controller.c
> @@ -115,12 +115,20 @@ guint gvir_config_domain_controller_get_index(GVirConfigDomainController *contro
>      return index;
>  }
>  
> +/**
> + * gvir_config_domain_controller_set_address:
> + * @address: (allow-none):
> + */
>  void gvir_config_domain_controller_set_address(GVirConfigDomainController *controller,
>                                                 GVirConfigDomainAddress *address)
>  {
>      g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_CONTROLLER(controller));
> -    g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_ADDRESS(address));
>  
> -    gvir_config_object_attach_replace(GVIR_CONFIG_OBJECT(controller),
> -                                      GVIR_CONFIG_OBJECT(address));
> +    if (address == NULL)
> +        gvir_config_object_delete_child(GVIR_CONFIG_OBJECT(controller),
> +                                        "address",
> +                                        NULL);
> +    else
> +        gvir_config_object_attach_replace(GVIR_CONFIG_OBJECT(controller),
> +                                          GVIR_CONFIG_OBJECT(address));

Maybe gvir_config_object_attach_replace could get a (somewhat redundant)
const char *child_name argument? Then passing NULL as the GVirConfigObject
*child would mean we want to remove the children? This would turn the
functions using this into one liners as the ones using set_node_content.

I'll need to look more carefully into the rest of the code, but this looks
quite mechanical and good.

Christophe
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20120504/d5badc86/attachment-0001.sig>


More information about the libvir-list mailing list