These functions may seem very specialized, and the same can easily
be achieved with 2 separate API calls, but since this is something
that is commonly done, these helpers save quite a few lines of code.
---
libvirt-gconfig/libvirt-gconfig-domain-disk.c | 49 ++++++--------------
libvirt-gconfig/libvirt-gconfig-domain-filesys.c | 19 ++------
.../libvirt-gconfig-domain-interface-bridge.c | 9 +---
.../libvirt-gconfig-domain-interface-network.c | 9 +---
libvirt-gconfig/libvirt-gconfig-domain-interface.c | 27 ++--------
libvirt-gconfig/libvirt-gconfig-object-private.h | 8 +++
libvirt-gconfig/libvirt-gconfig-object.c | 25 ++++++++++
7 files changed, 62 insertions(+), 84 deletions(-)
diff --git a/libvirt-gconfig/libvirt-gconfig-domain-disk.c
b/libvirt-gconfig/libvirt-gconfig-domain-disk.c
index e517d65..aa5ab81 100644
--- a/libvirt-gconfig/libvirt-gconfig-domain-disk.c
+++ b/libvirt-gconfig/libvirt-gconfig-domain-disk.c
@@ -130,13 +130,9 @@ void gvir_config_domain_disk_set_snapshot_type(GVirConfigDomainDisk
*disk,
void gvir_config_domain_disk_set_source(GVirConfigDomainDisk *disk,
const char *source)
{
- GVirConfigObject *source_node;
const char *attribute_name;
g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_DISK(disk));
- source_node = gvir_config_object_replace_child(GVIR_CONFIG_OBJECT(disk),
- "source");
- g_return_if_fail(GVIR_IS_CONFIG_OBJECT(source_node));
switch (disk->priv->type) {
case GVIR_CONFIG_DOMAIN_DISK_FILE:
@@ -154,62 +150,45 @@ void gvir_config_domain_disk_set_source(GVirConfigDomainDisk *disk,
default:
g_return_if_reached();
}
- gvir_config_object_set_attribute(source_node,
- attribute_name, source,
- NULL);
- g_object_unref(G_OBJECT(source_node));
+ gvir_config_object_replace_child_with_attribute(GVIR_CONFIG_OBJECT(disk),
+ "source",
+ attribute_name, source);
}
void gvir_config_domain_disk_set_driver_name(GVirConfigDomainDisk *disk,
const char *driver_name)
{
- GVirConfigObject *node;
-
g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_DISK(disk));
- node = gvir_config_object_add_child(GVIR_CONFIG_OBJECT(disk), "driver");
- g_return_if_fail(GVIR_IS_CONFIG_OBJECT(node));
- gvir_config_object_set_attribute(node, "name", driver_name, NULL);
- g_object_unref(G_OBJECT(node));
+ gvir_config_object_add_child_with_attribute(GVIR_CONFIG_OBJECT(disk),
+ "driver", "name",
driver_name);
}
void gvir_config_domain_disk_set_driver_type(GVirConfigDomainDisk *disk,
const char *driver_type)
{
- GVirConfigObject *node;
-
g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_DISK(disk));
- node = gvir_config_object_add_child(GVIR_CONFIG_OBJECT(disk), "driver");
- g_return_if_fail(GVIR_IS_CONFIG_OBJECT(node));
- gvir_config_object_set_attribute(node, "type", driver_type, NULL);
- g_object_unref(G_OBJECT(node));
+ gvir_config_object_add_child_with_attribute(GVIR_CONFIG_OBJECT(disk),
+ "driver", "type",
driver_type);
}
void gvir_config_domain_disk_set_target_bus(GVirConfigDomainDisk *disk,
GVirConfigDomainDiskBus bus)
{
- GVirConfigObject *node;
+ const char *bus_str;
g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_DISK(disk));
- node = gvir_config_object_add_child(GVIR_CONFIG_OBJECT(disk), "target");
- g_return_if_fail(GVIR_IS_CONFIG_OBJECT(node));
- gvir_config_object_set_attribute_with_type(node,
- "bus",
- GVIR_TYPE_CONFIG_DOMAIN_DISK_BUS,
- bus,
- NULL);
- g_object_unref(G_OBJECT(node));
+ bus_str = gvir_config_genum_get_nick(GVIR_TYPE_CONFIG_DOMAIN_DISK_BUS, bus);
+ g_return_if_fail(bus_str != NULL);
+ gvir_config_object_add_child_with_attribute(GVIR_CONFIG_OBJECT(disk),
+ "target", "bus",
bus_str);
}
void gvir_config_domain_disk_set_target_dev(GVirConfigDomainDisk *disk,
const char *dev)
{
- GVirConfigObject *node;
-
g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_DISK(disk));
- node = gvir_config_object_add_child(GVIR_CONFIG_OBJECT(disk), "target");
- g_return_if_fail(GVIR_IS_CONFIG_OBJECT(node));
- gvir_config_object_set_attribute(node, "dev", dev, NULL);
- g_object_unref(G_OBJECT(node));
+ gvir_config_object_add_child_with_attribute(GVIR_CONFIG_OBJECT(disk),
+ "target", "dev",
dev);
}
GVirConfigDomainDiskType
diff --git a/libvirt-gconfig/libvirt-gconfig-domain-filesys.c
b/libvirt-gconfig/libvirt-gconfig-domain-filesys.c
index ab33e50..ef942f8 100644
--- a/libvirt-gconfig/libvirt-gconfig-domain-filesys.c
+++ b/libvirt-gconfig/libvirt-gconfig-domain-filesys.c
@@ -114,13 +114,9 @@ void
gvir_config_domain_filesys_set_driver_type(GVirConfigDomainFilesys *filesys
void gvir_config_domain_filesys_set_source(GVirConfigDomainFilesys *filesys,
const char *source)
{
- GVirConfigObject *source_node;
const char *attribute_name;
g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_FILESYS(filesys));
- source_node = gvir_config_object_replace_child(GVIR_CONFIG_OBJECT(filesys),
- "source");
- g_return_if_fail(source_node != NULL);
switch (filesys->priv->type) {
case GVIR_CONFIG_DOMAIN_FILESYS_MOUNT:
@@ -139,23 +135,18 @@ void gvir_config_domain_filesys_set_source(GVirConfigDomainFilesys
*filesys,
g_return_if_reached();
}
- gvir_config_object_set_attribute(source_node,
- attribute_name, source,
- NULL);
- g_object_unref(G_OBJECT(source_node));
+ gvir_config_object_replace_child_with_attribute(GVIR_CONFIG_OBJECT(filesys),
+ "source",
+ attribute_name, source);
}
void gvir_config_domain_filesys_set_target(GVirConfigDomainFilesys *filesys,
const char *path)
{
- GVirConfigObject *node;
-
g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_FILESYS(filesys));
- node = gvir_config_object_add_child(GVIR_CONFIG_OBJECT(filesys),
"target");
- g_return_if_fail(GVIR_IS_CONFIG_OBJECT(node));
- gvir_config_object_set_attribute(node, "dir", path, NULL);
- g_object_unref(G_OBJECT(node));
+ gvir_config_object_add_child_with_attribute(GVIR_CONFIG_OBJECT(filesys),
+ "target", "dir",
path);
}
void gvir_config_domain_filesys_set_readonly(GVirConfigDomainFilesys *filesys,
diff --git a/libvirt-gconfig/libvirt-gconfig-domain-interface-bridge.c
b/libvirt-gconfig/libvirt-gconfig-domain-interface-bridge.c
index 9bf6853..61d3563 100644
--- a/libvirt-gconfig/libvirt-gconfig-domain-interface-bridge.c
+++ b/libvirt-gconfig/libvirt-gconfig-domain-interface-bridge.c
@@ -79,13 +79,8 @@ GVirConfigDomainInterfaceBridge
*gvir_config_domain_interface_bridge_new_from_xm
void gvir_config_domain_interface_bridge_set_source(GVirConfigDomainInterfaceBridge
*interface,
const char *brname)
{
- GVirConfigObject *source_node;
-
g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_INTERFACE_BRIDGE(interface));
- source_node = gvir_config_object_replace_child(GVIR_CONFIG_OBJECT(interface),
- "source");
- g_return_if_fail(GVIR_IS_CONFIG_OBJECT(source_node));
- gvir_config_object_set_attribute(source_node, "bridge", brname, NULL);
- g_object_unref(G_OBJECT(source_node));
+ gvir_config_object_replace_child_with_attribute(GVIR_CONFIG_OBJECT(interface),
+ "source",
"bridge", brname);
}
diff --git a/libvirt-gconfig/libvirt-gconfig-domain-interface-network.c
b/libvirt-gconfig/libvirt-gconfig-domain-interface-network.c
index 433c02a..6f24708 100644
--- a/libvirt-gconfig/libvirt-gconfig-domain-interface-network.c
+++ b/libvirt-gconfig/libvirt-gconfig-domain-interface-network.c
@@ -78,13 +78,8 @@ GVirConfigDomainInterfaceNetwork
*gvir_config_domain_interface_network_new_from_
void gvir_config_domain_interface_network_set_source(GVirConfigDomainInterfaceNetwork
*interface,
const char *source)
{
- GVirConfigObject *source_node;
-
g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_INTERFACE_NETWORK(interface));
- source_node = gvir_config_object_replace_child(GVIR_CONFIG_OBJECT(interface),
- "source");
- g_return_if_fail(GVIR_IS_CONFIG_OBJECT(source_node));
- gvir_config_object_set_attribute(source_node, "network", source, NULL);
- g_object_unref(G_OBJECT(source_node));
+ gvir_config_object_replace_child_with_attribute(GVIR_CONFIG_OBJECT(interface),
+ "source",
"network", source);
}
diff --git a/libvirt-gconfig/libvirt-gconfig-domain-interface.c
b/libvirt-gconfig/libvirt-gconfig-domain-interface.c
index ba3c9e3..0f427ff 100644
--- a/libvirt-gconfig/libvirt-gconfig-domain-interface.c
+++ b/libvirt-gconfig/libvirt-gconfig-domain-interface.c
@@ -54,15 +54,10 @@ static void
gvir_config_domain_interface_init(GVirConfigDomainInterface *interfa
void gvir_config_domain_interface_set_ifname(GVirConfigDomainInterface *interface,
const char *ifname)
{
- GVirConfigObject *node;
-
g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_INTERFACE(interface));
- node = gvir_config_object_replace_child(GVIR_CONFIG_OBJECT(interface),
- "target");
- g_return_if_fail(GVIR_IS_CONFIG_OBJECT(node));
- gvir_config_object_set_attribute(node, "device", ifname, NULL);
- g_object_unref(G_OBJECT(node));
+ gvir_config_object_replace_child_with_attribute(GVIR_CONFIG_OBJECT(interface),
+ "target",
"device", ifname);
}
void gvir_config_domain_interface_set_link_state(GVirConfigDomainInterface *interface,
@@ -86,29 +81,19 @@ void
gvir_config_domain_interface_set_link_state(GVirConfigDomainInterface *inte
void gvir_config_domain_interface_set_mac(GVirConfigDomainInterface *interface,
const char *mac_address)
{
- GVirConfigObject *node;
-
g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_INTERFACE(interface));
- node = gvir_config_object_replace_child(GVIR_CONFIG_OBJECT(interface),
- "mac");
- g_return_if_fail(GVIR_IS_CONFIG_OBJECT(node));
- gvir_config_object_set_attribute(node, "address", mac_address, NULL);
- g_object_unref(G_OBJECT(node));
+ gvir_config_object_replace_child_with_attribute(GVIR_CONFIG_OBJECT(interface),
+ "mac", "address",
mac_address);
}
void gvir_config_domain_interface_set_model(GVirConfigDomainInterface *interface,
const char *model)
{
- GVirConfigObject *node;
-
g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_INTERFACE(interface));
- node = gvir_config_object_replace_child(GVIR_CONFIG_OBJECT(interface),
- "model");
- g_return_if_fail(GVIR_IS_CONFIG_OBJECT(node));
- gvir_config_object_set_attribute(node, "type", model, NULL);
- g_object_unref(G_OBJECT(node));
+ gvir_config_object_replace_child_with_attribute(GVIR_CONFIG_OBJECT(interface),
+ "model", "type",
model);
}
G_GNUC_INTERNAL GVirConfigDomainDevice *
diff --git a/libvirt-gconfig/libvirt-gconfig-object-private.h
b/libvirt-gconfig/libvirt-gconfig-object-private.h
index f7c1f68..38c129f 100644
--- a/libvirt-gconfig/libvirt-gconfig-object-private.h
+++ b/libvirt-gconfig/libvirt-gconfig-object-private.h
@@ -43,8 +43,16 @@ void gvir_config_object_set_node_content_uint64(GVirConfigObject
*object,
guint64 value);
GVirConfigObject *gvir_config_object_add_child(GVirConfigObject *object,
const char *child_name);
+void gvir_config_object_add_child_with_attribute(GVirConfigObject *object,
+ const char *child_name,
+ const char *attr_name,
+ const char *attr_value);
GVirConfigObject *gvir_config_object_replace_child(GVirConfigObject *object,
const char *child_name);
+void gvir_config_object_replace_child_with_attribute(GVirConfigObject *object,
+ const char *child_name,
+ const char *attr_name,
+ const char *attr_value);
void gvir_config_object_delete_child(GVirConfigObject *object,
const char *child_name);
void gvir_config_object_set_child(GVirConfigObject *object,
diff --git a/libvirt-gconfig/libvirt-gconfig-object.c
b/libvirt-gconfig/libvirt-gconfig-object.c
index 4f95189..7a6d062 100644
--- a/libvirt-gconfig/libvirt-gconfig-object.c
+++ b/libvirt-gconfig/libvirt-gconfig-object.c
@@ -363,6 +363,19 @@ gvir_config_object_add_child(GVirConfigObject *object,
NULL));
}
+G_GNUC_INTERNAL void
+gvir_config_object_add_child_with_attribute(GVirConfigObject *object,
+ const char *child_name,
+ const char *attr_name,
+ const char *attr_value)
+{
+ GVirConfigObject *child;
+
+ child = gvir_config_object_add_child(object, child_name);
+ gvir_config_object_set_attribute(child, attr_name, attr_value, NULL);
+ g_object_unref(G_OBJECT(child));
+}
+
G_GNUC_INTERNAL GVirConfigObject *
gvir_config_object_replace_child(GVirConfigObject *object,
const char *child_name)
@@ -381,6 +394,18 @@ gvir_config_object_replace_child(GVirConfigObject *object,
NULL));
}
+G_GNUC_INTERNAL void
+gvir_config_object_replace_child_with_attribute(GVirConfigObject *object,
+ const char *child_name,
+ const char *attr_name,
+ const char *attr_value)
+{
+ GVirConfigObject *child;
+
+ child = gvir_config_object_replace_child(object, child_name);
+ gvir_config_object_set_attribute(child, attr_name, attr_value, NULL);
+ g_object_unref(G_OBJECT(child));
+}
G_GNUC_INTERNAL void
gvir_config_object_delete_child(GVirConfigObject *object,
--
1.7.7.4