On Fri, May 04, 2012 at 03:07:44AM +0300, Zeeshan Ali (Khattak) wrote: > From: "Zeeshan Ali (Khattak)" <[email protected]> > > 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
pgpCriVVl5ynx.pgp
Description: PGP signature
-- libvir-list mailing list [email protected] https://www.redhat.com/mailman/listinfo/libvir-list
