From: "Zeeshan Ali (Khattak)" <zeeshanak@xxxxxxxxx> 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"); 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)); } diff --git a/libvirt-gconfig/libvirt-gconfig-domain-os.c b/libvirt-gconfig/libvirt-gconfig-domain-os.c index 86f90a2..74cdd4d 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-os.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-os.c @@ -81,6 +81,10 @@ void gvir_config_domain_os_set_os_type(GVirConfigDomainOs *os, "type", type_str); } +/** + * gvir_config_domain_os_set_kernel: + * @kernel: (allow-none): The kernel path + */ void gvir_config_domain_os_set_kernel(GVirConfigDomainOs *os, const char * kernel) { @@ -88,6 +92,10 @@ void gvir_config_domain_os_set_kernel(GVirConfigDomainOs *os, "kernel", kernel); } +/** + * gvir_config_domain_os_set_ramdisk: + * @ramdisk: (allow-none): The ramdisk path + */ void gvir_config_domain_os_set_ramdisk(GVirConfigDomainOs *os, const char * ramdisk) { @@ -95,6 +103,10 @@ void gvir_config_domain_os_set_ramdisk(GVirConfigDomainOs *os, "initrd", ramdisk); } +/** + * gvir_config_domain_os_set_cmdline: + * @cmdline: (allow-none): The direct boot commandline + */ void gvir_config_domain_os_set_cmdline(GVirConfigDomainOs *os, const char * cmdline) { @@ -102,6 +114,10 @@ void gvir_config_domain_os_set_cmdline(GVirConfigDomainOs *os, "cmdline", cmdline); } +/** + * gvir_config_domain_os_set_init: + * @init: (allow-none): + */ void gvir_config_domain_os_set_init(GVirConfigDomainOs *os, const char * init) { @@ -109,6 +125,10 @@ void gvir_config_domain_os_set_init(GVirConfigDomainOs *os, "init", init); } +/** + * gvir_config_domain_os_set_loader: + * @loader: (allow-none): + */ void gvir_config_domain_os_set_loader(GVirConfigDomainOs *os, const char * loader) { diff --git a/libvirt-gconfig/libvirt-gconfig-domain-redirdev.c b/libvirt-gconfig/libvirt-gconfig-domain-redirdev.c index efecb5a..2aae03d 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-redirdev.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-redirdev.c @@ -81,12 +81,20 @@ void gvir_config_domain_redirdev_set_bus(GVirConfigDomainRedirdev *redirdev, NULL); } +/** + * gvir_config_domain_redirdev_set_address: + * @address: (allow-none): + */ void gvir_config_domain_redirdev_set_address(GVirConfigDomainRedirdev *redirdev, GVirConfigDomainAddress *address) { g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_REDIRDEV(redirdev)); - g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_ADDRESS(address)); - gvir_config_object_attach_replace(GVIR_CONFIG_OBJECT(redirdev), - GVIR_CONFIG_OBJECT(address)); + if (address == NULL) + gvir_config_object_delete_child(GVIR_CONFIG_OBJECT(redirdev), + "address", + NULL); + else + gvir_config_object_attach_replace(GVIR_CONFIG_OBJECT(redirdev), + GVIR_CONFIG_OBJECT(address)); } diff --git a/libvirt-gconfig/libvirt-gconfig-domain-seclabel.c b/libvirt-gconfig/libvirt-gconfig-domain-seclabel.c index cc83797..9d9ec33 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-seclabel.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-seclabel.c @@ -89,6 +89,10 @@ void gvir_config_domain_seclabel_set_model(GVirConfigDomainSeclabel *seclabel, } +/** + * gvir_config_domain_seclabel_set_baselabel: + * @label: (allow-none): + */ void gvir_config_domain_seclabel_set_baselabel(GVirConfigDomainSeclabel *seclabel, const char *label) { @@ -98,6 +102,10 @@ void gvir_config_domain_seclabel_set_baselabel(GVirConfigDomainSeclabel *seclabe "baselabel", label); } +/** + * gvir_config_domain_seclabel_set_label: + * @label: (allow-none): + */ void gvir_config_domain_seclabel_set_label(GVirConfigDomainSeclabel *seclabel, const char *label) { diff --git a/libvirt-gconfig/libvirt-gconfig-domain.c b/libvirt-gconfig/libvirt-gconfig-domain.c index b19ac4c..aeeb659 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain.c +++ b/libvirt-gconfig/libvirt-gconfig-domain.c @@ -204,6 +204,10 @@ const char *gvir_config_domain_get_name(GVirConfigDomain *domain) "name"); } +/** + * gvir_config_domain_set_name: + * @name: (allow-none): + */ void gvir_config_domain_set_name(GVirConfigDomain *domain, const char *name) { gvir_config_object_set_node_content(GVIR_CONFIG_OBJECT(domain), @@ -217,6 +221,10 @@ const char *gvir_config_domain_get_description(GVirConfigDomain *domain) "description"); } +/** + * gvir_config_domain_set_description: + * @description: (allow-none): + */ void gvir_config_domain_set_description(GVirConfigDomain *domain, const char *description) { gvir_config_object_set_node_content(GVIR_CONFIG_OBJECT(domain), @@ -313,14 +321,20 @@ void gvir_config_domain_set_features(GVirConfigDomain *domain, g_object_notify(G_OBJECT(domain), "features"); } +/** + * gvir_config_domain_set_clock: + * @klock: (allow-none): + */ void gvir_config_domain_set_clock(GVirConfigDomain *domain, GVirConfigDomainClock *klock) { g_return_if_fail(GVIR_CONFIG_IS_DOMAIN(domain)); - g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_CLOCK(klock)); - gvir_config_object_attach_replace(GVIR_CONFIG_OBJECT(domain), - GVIR_CONFIG_OBJECT(klock)); + if (klock == NULL) + gvir_config_object_delete_child(GVIR_CONFIG_OBJECT(domain), "clock", NULL); + else + gvir_config_object_attach_replace(GVIR_CONFIG_OBJECT(domain), + GVIR_CONFIG_OBJECT(klock)); } /** @@ -341,24 +355,38 @@ GVirConfigDomainOs *gvir_config_domain_get_os(GVirConfigDomain *domain) return GVIR_CONFIG_DOMAIN_OS(object); } +/** + * gvir_config_domain_set_os: + * @os: (allow-none): + */ void gvir_config_domain_set_os(GVirConfigDomain *domain, GVirConfigDomainOs *os) { g_return_if_fail(GVIR_CONFIG_IS_DOMAIN(domain)); - g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_OS(os)); - gvir_config_object_attach_replace(GVIR_CONFIG_OBJECT(domain), - GVIR_CONFIG_OBJECT(os)); + if (os == NULL) + gvir_config_object_delete_child(GVIR_CONFIG_OBJECT(domain), "os", NULL); + else + gvir_config_object_attach_replace(GVIR_CONFIG_OBJECT(domain), + GVIR_CONFIG_OBJECT(os)); } +/** + * gvir_config_domain_set_seclabel: + * @seclabel: (allow-none): + */ void gvir_config_domain_set_seclabel(GVirConfigDomain *domain, GVirConfigDomainSeclabel *seclabel) { g_return_if_fail(GVIR_CONFIG_IS_DOMAIN(domain)); - g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_SECLABEL(seclabel)); - gvir_config_object_attach_replace(GVIR_CONFIG_OBJECT(domain), - GVIR_CONFIG_OBJECT(seclabel)); + if (seclabel == NULL) + gvir_config_object_delete_child(GVIR_CONFIG_OBJECT(domain), + "seclabel", + NULL); + else + gvir_config_object_attach_replace(GVIR_CONFIG_OBJECT(domain), + GVIR_CONFIG_OBJECT(seclabel)); } void gvir_config_domain_set_lifecycle(GVirConfigDomain *domain, @@ -394,6 +422,14 @@ void gvir_config_domain_set_devices(GVirConfigDomain *domain, g_return_if_fail(GVIR_CONFIG_IS_DOMAIN(domain)); + if (devices == NULL) { + gvir_config_object_delete_child(GVIR_CONFIG_OBJECT(domain), + "devices", + NULL); + + return; + } + devices_node = gvir_config_object_new(GVIR_CONFIG_TYPE_OBJECT, "devices", NULL); for (it = devices; it != NULL; it = it->next) { diff --git a/libvirt-gconfig/libvirt-gconfig-object.c b/libvirt-gconfig/libvirt-gconfig-object.c index df4836d..4115367 100644 --- a/libvirt-gconfig/libvirt-gconfig-object.c +++ b/libvirt-gconfig/libvirt-gconfig-object.c @@ -530,7 +530,12 @@ gvir_config_object_set_node_content(GVirConfigObject *object, g_return_if_fail(GVIR_CONFIG_IS_OBJECT(object)); g_return_if_fail(node_name != NULL); - g_return_if_fail(value != NULL); + + if (value == NULL) { + gvir_config_object_delete_child(object, node_name, NULL); + + return; + } node = gvir_config_object_replace_child(object, node_name); g_return_if_fail(node != NULL); diff --git a/libvirt-gconfig/libvirt-gconfig-storage-permissions.c b/libvirt-gconfig/libvirt-gconfig-storage-permissions.c index 57e50c4..5c0d40f 100644 --- a/libvirt-gconfig/libvirt-gconfig-storage-permissions.c +++ b/libvirt-gconfig/libvirt-gconfig-storage-permissions.c @@ -79,6 +79,10 @@ void gvir_config_storage_permissions_set_group(GVirConfigStoragePermissions *per "group", group); } +/** + * gvir_config_storage_permissions_set_label: + * @label: (allow-none): + */ void gvir_config_storage_permissions_set_label(GVirConfigStoragePermissions *perms, const char *label) { diff --git a/libvirt-gconfig/libvirt-gconfig-storage-pool-source.c b/libvirt-gconfig/libvirt-gconfig-storage-pool-source.c index e78989c..2f5af57 100644 --- a/libvirt-gconfig/libvirt-gconfig-storage-pool-source.c +++ b/libvirt-gconfig/libvirt-gconfig-storage-pool-source.c @@ -137,6 +137,10 @@ void gvir_config_storage_pool_source_set_host(GVirConfigStoragePoolSource *sourc g_object_unref(G_OBJECT(node)); } +/** + * gvir_config_storage_pool_source_set_name: + * @name: (allow-none): + */ void gvir_config_storage_pool_source_set_name(GVirConfigStoragePoolSource *source, const char *name) { diff --git a/libvirt-gconfig/libvirt-gconfig-storage-pool-target.c b/libvirt-gconfig/libvirt-gconfig-storage-pool-target.c index 0d7f164..3ed1680 100644 --- a/libvirt-gconfig/libvirt-gconfig-storage-pool-target.c +++ b/libvirt-gconfig/libvirt-gconfig-storage-pool-target.c @@ -71,6 +71,10 @@ GVirConfigStoragePoolTarget *gvir_config_storage_pool_target_new_from_xml(const return GVIR_CONFIG_STORAGE_POOL_TARGET(object); } +/** + * gvir_config_storage_pool_target_set_path: + * @path: (allow-none): + */ void gvir_config_storage_pool_target_set_path(GVirConfigStoragePoolTarget *target, const char *path) { @@ -80,12 +84,20 @@ void gvir_config_storage_pool_target_set_path(GVirConfigStoragePoolTarget *targe "path", path); } +/** + * gvir_config_storage_pool_perms_set_permissions: + * @perms: (allow-none): + */ void gvir_config_storage_pool_target_set_permissions(GVirConfigStoragePoolTarget *target, GVirConfigStoragePermissions *perms) { g_return_if_fail(GVIR_CONFIG_IS_STORAGE_POOL_TARGET(target)); - g_return_if_fail(GVIR_CONFIG_IS_STORAGE_PERMISSIONS(perms)); - gvir_config_object_attach_replace(GVIR_CONFIG_OBJECT(target), - GVIR_CONFIG_OBJECT(perms)); + if (perms == NULL) + gvir_config_object_delete_child(GVIR_CONFIG_OBJECT(target), + "permissions", + NULL); + else + gvir_config_object_attach_replace(GVIR_CONFIG_OBJECT(target), + GVIR_CONFIG_OBJECT(perms)); } diff --git a/libvirt-gconfig/libvirt-gconfig-storage-pool.c b/libvirt-gconfig/libvirt-gconfig-storage-pool.c index c524c17..d98eb5a 100644 --- a/libvirt-gconfig/libvirt-gconfig-storage-pool.c +++ b/libvirt-gconfig/libvirt-gconfig-storage-pool.c @@ -86,6 +86,10 @@ void gvir_config_storage_pool_set_pool_type(GVirConfigStoragePool *pool, NULL); } +/** + * gvir_config_storage_pool_set_name: + * @name: (allow-none): + */ void gvir_config_storage_pool_set_name(GVirConfigStoragePool *pool, const char *name) { @@ -95,6 +99,10 @@ void gvir_config_storage_pool_set_name(GVirConfigStoragePool *pool, "name", name); } +/** + * gvir_config_storage_pool_set_uuid: + * @uuid: (allow-none): + */ void gvir_config_storage_pool_set_uuid(GVirConfigStoragePool *pool, const char *uuid) { @@ -131,22 +139,38 @@ void gvir_config_storage_pool_set_available(GVirConfigStoragePool *pool, "available", available); } +/** + * gvir_config_storage_pool_set_source: + * @source: (allow-none): + */ void gvir_config_storage_pool_set_source(GVirConfigStoragePool *pool, GVirConfigStoragePoolSource *source) { g_return_if_fail(GVIR_CONFIG_IS_STORAGE_POOL(pool)); - g_return_if_fail(GVIR_CONFIG_IS_STORAGE_POOL_SOURCE(source)); - gvir_config_object_attach_replace(GVIR_CONFIG_OBJECT(pool), - GVIR_CONFIG_OBJECT(source)); + if (source == NULL) + gvir_config_object_delete_child(GVIR_CONFIG_OBJECT(pool), + "source", + NULL); + else + gvir_config_object_attach_replace(GVIR_CONFIG_OBJECT(pool), + GVIR_CONFIG_OBJECT(source)); } +/** + * gvir_config_storage_pool_set_target: + * @target: (allow-none): + */ void gvir_config_storage_pool_set_target(GVirConfigStoragePool *pool, GVirConfigStoragePoolTarget *target) { g_return_if_fail(GVIR_CONFIG_IS_STORAGE_POOL(pool)); - g_return_if_fail(GVIR_CONFIG_IS_STORAGE_POOL_TARGET(target)); - gvir_config_object_attach_replace(GVIR_CONFIG_OBJECT(pool), - GVIR_CONFIG_OBJECT(target)); + if (target == NULL) + gvir_config_object_delete_child(GVIR_CONFIG_OBJECT(pool), + "target", + NULL); + else + gvir_config_object_attach_replace(GVIR_CONFIG_OBJECT(pool), + GVIR_CONFIG_OBJECT(target)); } diff --git a/libvirt-gconfig/libvirt-gconfig-storage-vol-backing-store.c b/libvirt-gconfig/libvirt-gconfig-storage-vol-backing-store.c index 2e8aa22..620c8e6 100644 --- a/libvirt-gconfig/libvirt-gconfig-storage-vol-backing-store.c +++ b/libvirt-gconfig/libvirt-gconfig-storage-vol-backing-store.c @@ -84,6 +84,10 @@ void gvir_config_storage_vol_backing_store_set_format(GVirConfigStorageVolBackin g_object_unref(G_OBJECT(node)); } +/** + * gvir_config_storage_vol_backing_store_set_path: + * @path: (allow-none): + */ void gvir_config_storage_vol_backing_store_set_path(GVirConfigStorageVolBackingStore *backing_store, const char *path) { diff --git a/libvirt-gconfig/libvirt-gconfig-storage-vol-target.c b/libvirt-gconfig/libvirt-gconfig-storage-vol-target.c index 3786e2b..1de545e 100644 --- a/libvirt-gconfig/libvirt-gconfig-storage-vol-target.c +++ b/libvirt-gconfig/libvirt-gconfig-storage-vol-target.c @@ -84,12 +84,20 @@ void gvir_config_storage_vol_target_set_format(GVirConfigStorageVolTarget *targe g_object_unref(G_OBJECT(node)); } +/** + * gvir_config_storage_vol_target_set_permissions: + * @perms: (allow-none): + */ void gvir_config_storage_vol_target_set_permissions(GVirConfigStorageVolTarget *target, GVirConfigStoragePermissions *perms) { g_return_if_fail(GVIR_CONFIG_IS_STORAGE_VOL_TARGET(target)); - g_return_if_fail(GVIR_CONFIG_IS_STORAGE_PERMISSIONS(perms)); - gvir_config_object_attach_replace(GVIR_CONFIG_OBJECT(target), - GVIR_CONFIG_OBJECT(perms)); + if (perms == NULL) + gvir_config_object_delete_child(GVIR_CONFIG_OBJECT(target), + "permissions", + NULL); + else + gvir_config_object_attach_replace(GVIR_CONFIG_OBJECT(target), + GVIR_CONFIG_OBJECT(perms)); } diff --git a/libvirt-gconfig/libvirt-gconfig-storage-vol.c b/libvirt-gconfig/libvirt-gconfig-storage-vol.c index 6281c02..a030a5c 100644 --- a/libvirt-gconfig/libvirt-gconfig-storage-vol.c +++ b/libvirt-gconfig/libvirt-gconfig-storage-vol.c @@ -74,6 +74,10 @@ GVirConfigStorageVol *gvir_config_storage_vol_new_from_xml(const gchar *xml, return GVIR_CONFIG_STORAGE_VOL(object); } +/** + * gvir_config_storage_vol_set_name: + * @name: (allow-none): + */ void gvir_config_storage_vol_set_name(GVirConfigStorageVol *vol, const char *name) { @@ -101,22 +105,38 @@ void gvir_config_storage_vol_set_allocation(GVirConfigStorageVol *vol, "allocation", allocation); } +/** + * gvir_config_storage_vol_set_target: + * @target: (allow-none): + */ void gvir_config_storage_vol_set_target(GVirConfigStorageVol *vol, GVirConfigStorageVolTarget *target) { g_return_if_fail(GVIR_CONFIG_IS_STORAGE_VOL(vol)); - g_return_if_fail(GVIR_CONFIG_IS_STORAGE_VOL_TARGET(target)); - gvir_config_object_attach_replace(GVIR_CONFIG_OBJECT(vol), - GVIR_CONFIG_OBJECT(target)); + if (target == NULL) + gvir_config_object_delete_child(GVIR_CONFIG_OBJECT(vol), + "target", + NULL); + else + gvir_config_object_attach_replace(GVIR_CONFIG_OBJECT(vol), + GVIR_CONFIG_OBJECT(target)); } +/** + * gvir_config_storage_vol_set_backing_store: + * @backing_store: (allow-none): + */ void gvir_config_storage_vol_set_backing_store(GVirConfigStorageVol *vol, GVirConfigStorageVolBackingStore *backing_store) { g_return_if_fail(GVIR_CONFIG_IS_STORAGE_VOL(vol)); - g_return_if_fail(GVIR_CONFIG_IS_STORAGE_VOL_BACKING_STORE(backing_store)); - gvir_config_object_attach_replace(GVIR_CONFIG_OBJECT(vol), - GVIR_CONFIG_OBJECT(backing_store)); + if (backing_store == NULL) + gvir_config_object_delete_child(GVIR_CONFIG_OBJECT(vol), + "backingStore", + NULL); + else + gvir_config_object_attach_replace(GVIR_CONFIG_OBJECT(vol), + GVIR_CONFIG_OBJECT(backing_store)); } -- 1.7.7.6 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list