--
v2: use g_return_if_fail to test function args for sanity
---
libvirt-gconfig/libvirt-gconfig-domain-disk.c | 50 +++++++++++++++++++++++++
libvirt-gconfig/libvirt-gconfig-domain-disk.h | 25 ++++++++++++
libvirt-gconfig/libvirt-gconfig.sym | 6 +++
3 files changed, 81 insertions(+), 0 deletions(-)
diff --git a/libvirt-gconfig/libvirt-gconfig-domain-disk.c
b/libvirt-gconfig/libvirt-gconfig-domain-disk.c
index 41f456b..cf7e481 100644
--- a/libvirt-gconfig/libvirt-gconfig-domain-disk.c
+++ b/libvirt-gconfig/libvirt-gconfig-domain-disk.c
@@ -27,6 +27,8 @@
#include <libxml/tree.h>
#include "libvirt-gconfig/libvirt-gconfig.h"
+#include "libvirt-gconfig/libvirt-gconfig-helpers-private.h"
+#include "libvirt-gconfig/libvirt-gconfig-object-private.h"
extern gboolean debugFlag;
@@ -79,3 +81,51 @@ GVirConfigDomainDisk *gvir_config_domain_disk_new_from_xml(const gchar
*xml,
"disk", NULL, xml, error);
return GVIR_CONFIG_DOMAIN_DISK(object);
}
+
+void gvir_config_domain_disk_set_type(GVirConfigDomainDisk *disk,
+ GVirConfigDomainDiskType type)
+{
+ xmlNodePtr node;
+ const char *type_str;
+
+ g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_DISK(disk));
+
+ node = gvir_config_object_get_xml_node(GVIR_CONFIG_OBJECT(disk));
+ g_return_if_fail(node != NULL);
+ type_str = gvir_config_genum_get_nick(GVIR_TYPE_CONFIG_DOMAIN_DISK_TYPE,
+ type);
+ g_return_if_fail(type_str != NULL);
+ xmlNewProp(node, (xmlChar*)"type", (xmlChar*)type_str);
+}
+
+void gvir_config_domain_disk_set_guest_device_type(GVirConfigDomainDisk *disk,
+ GVirConfigDomainDiskGuestDeviceType
type)
+{
+ xmlNodePtr node;
+ const char *type_str;
+
+ g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_DISK(disk));
+
+ node = gvir_config_object_get_xml_node(GVIR_CONFIG_OBJECT(disk));
+ g_return_if_fail(node != NULL);
+ type_str =
gvir_config_genum_get_nick(GVIR_TYPE_CONFIG_DOMAIN_DISK_GUEST_DEVICE_TYPE,
+ type);
+ g_return_if_fail(type_str != NULL);
+ xmlNewProp(node, (xmlChar*)"device", (xmlChar*)type_str);
+}
+
+void gvir_config_domain_disk_set_snapshot_type(GVirConfigDomainDisk *disk,
+ GVirConfigDomainDiskSnapshotType type)
+{
+ xmlNodePtr node;
+ const char *type_str;
+
+ g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_DISK(disk));
+
+ node = gvir_config_object_get_xml_node(GVIR_CONFIG_OBJECT(disk));
+ g_return_if_fail(node != NULL);
+ type_str = gvir_config_genum_get_nick(GVIR_TYPE_CONFIG_DOMAIN_DISK_SNAPSHOT_TYPE,
+ type);
+ g_return_if_fail(type_str != NULL);
+ xmlNewProp(node, (xmlChar*)"snapshot", (xmlChar*)type_str);
+}
diff --git a/libvirt-gconfig/libvirt-gconfig-domain-disk.h
b/libvirt-gconfig/libvirt-gconfig-domain-disk.h
index 98835f7..e9428ea 100644
--- a/libvirt-gconfig/libvirt-gconfig-domain-disk.h
+++ b/libvirt-gconfig/libvirt-gconfig-domain-disk.h
@@ -56,6 +56,24 @@ struct _GVirConfigDomainDiskClass
gpointer padding[20];
};
+typedef enum {
+ GVIR_CONFIG_DOMAIN_DISK_FILE,
+ GVIR_CONFIG_DOMAIN_DISK_BLOCK,
+ GVIR_CONFIG_DOMAIN_DISK_DIR,
+ GVIR_CONFIG_DOMAIN_DISK_NETWORK
+} GVirConfigDomainDiskType;
+
+typedef enum {
+ GVIR_CONFIG_DOMAIN_DISK_GUEST_DEVICE_DISK,
+ GVIR_CONFIG_DOMAIN_DISK_GUEST_DEVICE_FLOPPY,
+ GVIR_CONFIG_DOMAIN_DISK_GUEST_DEVICE_CDROM
+} GVirConfigDomainDiskGuestDeviceType;
+
+typedef enum {
+ GVIR_CONFIG_DOMAIN_DISK_SNAPSHOT_NO,
+ GVIR_CONFIG_DOMAIN_DISK_SNAPSHOT_INTERNAL,
+ GVIR_CONFIG_DOMAIN_DISK_SNAPSHOT_EXTERNAL
+} GVirConfigDomainDiskSnapshotType;
GType gvir_config_domain_disk_get_type(void);
@@ -63,6 +81,13 @@ GVirConfigDomainDisk *gvir_config_domain_disk_new(void);
GVirConfigDomainDisk *gvir_config_domain_disk_new_from_xml(const gchar *xml,
GError **error);
+void gvir_config_domain_disk_set_type(GVirConfigDomainDisk *disk,
+ GVirConfigDomainDiskType type);
+void gvir_config_domain_disk_set_guest_device_type(GVirConfigDomainDisk *disk,
+ GVirConfigDomainDiskGuestDeviceType
type);
+void gvir_config_domain_disk_set_snapshot_type(GVirConfigDomainDisk *disk,
+ GVirConfigDomainDiskSnapshotType type);
+
G_END_DECLS
#endif /* __LIBVIRT_GCONFIG_DOMAIN_DISK_H__ */
diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym
index 1bc03ec..258c1f3 100644
--- a/libvirt-gconfig/libvirt-gconfig.sym
+++ b/libvirt-gconfig/libvirt-gconfig.sym
@@ -29,8 +29,14 @@ LIBVIRT_GOBJECT_0.0.1 {
gvir_config_domain_device_get_type;
gvir_config_domain_disk_get_type;
+ gvir_config_domain_disk_guest_device_type_get_type;
+ gvir_config_domain_disk_snapshot_type_get_type;
+ gvir_config_domain_disk_type_get_type;
gvir_config_domain_disk_new;
gvir_config_domain_disk_new_from_xml;
+ gvir_config_domain_disk_set_snapshot_type;
+ gvir_config_domain_disk_set_guest_device_type;
+ gvir_config_domain_disk_set_type;
gvir_config_domain_os_get_type;
gvir_config_domain_os_boot_device_get_type;
--
1.7.7.3