[libvirt] [libvirt-glib 34/37] Implement gvir_config_device_chardev_set_target

Christophe Fergeau cfergeau at redhat.com
Thu Nov 10 20:34:06 UTC 2011


---
 libvirt-gconfig/libvirt-gconfig-chardev-target.c |   42 +++++++++++++++++++++-
 libvirt-gconfig/libvirt-gconfig-chardev-target.h |    2 +
 libvirt-gconfig/libvirt-gconfig-device-chardev.c |   18 +++++++++
 libvirt-gconfig/libvirt-gconfig.sym              |    2 +
 4 files changed, 63 insertions(+), 1 deletions(-)

diff --git a/libvirt-gconfig/libvirt-gconfig-chardev-target.c b/libvirt-gconfig/libvirt-gconfig-chardev-target.c
index a9e5a20..64430ea 100644
--- a/libvirt-gconfig/libvirt-gconfig-chardev-target.c
+++ b/libvirt-gconfig/libvirt-gconfig-chardev-target.c
@@ -40,8 +40,16 @@ struct _GVirConfigChardevTargetPrivate
     gboolean unused;
 };
 
-G_DEFINE_ABSTRACT_TYPE(GVirConfigChardevTarget, gvir_config_chardev_target, GVIR_TYPE_CONFIG_OBJECT);
+struct _GVirConfigChardevTargetClassPrivate
+{
+    char *nick;
+};
+typedef struct _GVirConfigChardevTargetClassPrivate GVirConfigChardevTargetClassPrivate;
+#define GVIR_CONFIG_CHARDEV_TARGET_CLASS_GET_PRIVATE(klass)                         \
+        (G_TYPE_CLASS_GET_PRIVATE((klass), GVIR_TYPE_CONFIG_CHARDEV_TARGET, GVirConfigChardevTargetClassPrivate))
 
+G_DEFINE_ABSTRACT_TYPE_WITH_CODE(GVirConfigChardevTarget, gvir_config_chardev_target, GVIR_TYPE_CONFIG_OBJECT,
+                                 g_type_add_class_private(g_define_type_id, sizeof(GVirConfigChardevTargetClassPrivate)));
 
 static void gvir_config_chardev_target_class_init(GVirConfigChardevTargetClass *klass)
 {
@@ -60,3 +68,35 @@ static void gvir_config_chardev_target_init(GVirConfigChardevTarget *chardev_tar
 
     memset(priv, 0, sizeof(*priv));
 }
+
+const char *gvir_config_chardev_target_class_get_nick(GType type)
+{
+    GVirConfigChardevTargetClass *klass;
+    GVirConfigChardevTargetClassPrivate *priv;
+
+    klass = g_type_class_peek(type);
+    if (klass == NULL)
+        return NULL;
+
+    priv = GVIR_CONFIG_CHARDEV_TARGET_CLASS_GET_PRIVATE(klass);
+    if (priv == NULL)
+        return NULL;
+    return priv->nick;
+}
+
+void gvir_config_chardev_target_class_set_nick(GType type, const char *nick)
+{
+    GVirConfigChardevTargetClass *klass;
+    GVirConfigChardevTargetClassPrivate *priv;
+
+    klass = g_type_class_ref(type);
+    if (klass == NULL)
+        return;
+
+    priv = GVIR_CONFIG_CHARDEV_TARGET_CLASS_GET_PRIVATE(klass);
+    if (priv == NULL)
+        return;
+    g_free(priv->nick);
+    priv->nick = g_strdup(nick);
+    g_type_class_unref(klass);
+}
diff --git a/libvirt-gconfig/libvirt-gconfig-chardev-target.h b/libvirt-gconfig/libvirt-gconfig-chardev-target.h
index 41fd875..53a10a1 100644
--- a/libvirt-gconfig/libvirt-gconfig-chardev-target.h
+++ b/libvirt-gconfig/libvirt-gconfig-chardev-target.h
@@ -58,6 +58,8 @@ struct _GVirConfigChardevTargetClass
 
 
 GType gvir_config_chardev_target_get_type(void);
+const char *gvir_config_chardev_target_class_get_nick(GType type);
+void gvir_config_chardev_target_class_set_nick(GType type, const char *nick);
 
 G_END_DECLS
 
diff --git a/libvirt-gconfig/libvirt-gconfig-device-chardev.c b/libvirt-gconfig/libvirt-gconfig-device-chardev.c
index 10f3d57..62859fe 100644
--- a/libvirt-gconfig/libvirt-gconfig-device-chardev.c
+++ b/libvirt-gconfig/libvirt-gconfig-device-chardev.c
@@ -98,3 +98,21 @@ void gvir_config_device_chardev_set_source(GVirConfigDeviceChardev *chardev,
 
     gvir_config_object_set_child(GVIR_CONFIG_OBJECT(chardev), source_node);
 }
+
+void gvir_config_device_chardev_set_target(GVirConfigDeviceChardev *chardev,
+                                           GVirConfigChardevTarget *target)
+{
+    xmlNodePtr node;
+    xmlNodePtr target_node;
+    const char *target_type;
+
+    node = gvir_config_object_get_xml_node(GVIR_CONFIG_OBJECT(chardev));
+    target_node = gvir_config_object_get_xml_node(GVIR_CONFIG_OBJECT(target));
+    if ((node == NULL) || (target_node == NULL))
+        return;
+    target_type = gvir_config_chardev_target_class_get_nick(G_OBJECT_TYPE(target));
+    g_return_if_fail(target_type != NULL);
+    xmlNodeSetName(node, (xmlChar*)target_type);
+
+    gvir_config_object_set_child(GVIR_CONFIG_OBJECT(chardev), target_node);
+}
diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym
index df08b59..0889a53 100644
--- a/libvirt-gconfig/libvirt-gconfig.sym
+++ b/libvirt-gconfig/libvirt-gconfig.sym
@@ -9,6 +9,8 @@ LIBVIRT_GOBJECT_0.0.1 {
 	gvir_config_chardev_source_class_set_nick;
 
 	gvir_config_chardev_target_get_type;
+	gvir_config_chardev_target_class_get_nick;
+	gvir_config_chardev_target_class_set_nick;
 
 	gvir_config_clock_get_type;
 	gvir_config_clock_offset_get_type;
-- 
1.7.7




More information about the libvir-list mailing list