---
libvirt-gconfig/libvirt-gconfig-domain.c | 29 +++++++++++++++++++++++++
libvirt-gconfig/libvirt-gconfig-domain.h | 2 +
libvirt-gconfig/libvirt-gconfig-object.c | 32 ++++++++++++++++++++++++++++
libvirt-gconfig/libvirt-gconfig-object.h | 5 ++++
libvirt-gconfig/libvirt-gconfig.sym | 2 +
libvirt-gconfig/tests/test-domain-create.c | 3 ++
libvirt-gconfig/tests/test-domain-parse.c | 3 ++
libvirt-gconfig/tests/test-domain.xml | 1 +
8 files changed, 77 insertions(+), 0 deletions(-)
diff --git a/libvirt-gconfig/libvirt-gconfig-domain.c
b/libvirt-gconfig/libvirt-gconfig-domain.c
index 039e551..71bfb55 100644
--- a/libvirt-gconfig/libvirt-gconfig-domain.c
+++ b/libvirt-gconfig/libvirt-gconfig-domain.c
@@ -44,6 +44,7 @@ G_DEFINE_TYPE(GVirConfigDomain, gvir_config_domain,
GVIR_TYPE_CONFIG_OBJECT);
enum {
PROP_0,
PROP_NAME,
+ PROP_MEMORY,
};
static void gvir_config_domain_get_property(GObject *object,
@@ -57,6 +58,9 @@ static void gvir_config_domain_get_property(GObject *object,
case PROP_NAME:
g_value_take_string(value, gvir_config_domain_get_name(domain));
break;
+ case PROP_MEMORY:
+ g_value_set_uint64(value, gvir_config_domain_get_memory(domain));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
@@ -74,6 +78,9 @@ static void gvir_config_domain_set_property(GObject *object,
case PROP_NAME:
gvir_config_domain_set_name(domain, g_value_get_string(value));
break;
+ case PROP_MEMORY:
+ gvir_config_domain_set_memory(domain, g_value_get_uint64(value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
}
@@ -97,6 +104,15 @@ static void gvir_config_domain_class_init(GVirConfigDomainClass
*klass)
NULL,
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property(object_class,
+ PROP_MEMORY,
+ g_param_spec_uint64("memory",
+ "Memory",
+ "Maximum Guest Memory (in
kilobytes)",
+ 0, G_MAXUINT64,
+ 0,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
}
@@ -150,3 +166,16 @@ void gvir_config_domain_set_name(GVirConfigDomain *domain, const char
*name)
"name", name);
g_object_notify(G_OBJECT(domain), "name");
}
+
+guint64 gvir_config_domain_get_memory(GVirConfigDomain *domain)
+{
+ return gvir_config_object_get_node_content_uint64(GVIR_CONFIG_OBJECT(domain),
+ "memory");
+}
+
+void gvir_config_domain_set_memory(GVirConfigDomain *domain, guint64 memory)
+{
+ gvir_config_object_set_node_content_uint64(GVIR_CONFIG_OBJECT(domain),
+ "memory", memory);
+ g_object_notify(G_OBJECT(domain), "memory");
+}
diff --git a/libvirt-gconfig/libvirt-gconfig-domain.h
b/libvirt-gconfig/libvirt-gconfig-domain.h
index b5ae050..03169b2 100644
--- a/libvirt-gconfig/libvirt-gconfig-domain.h
+++ b/libvirt-gconfig/libvirt-gconfig-domain.h
@@ -64,6 +64,8 @@ GVirConfigDomain *gvir_config_domain_new(void);
char *gvir_config_domain_get_name(GVirConfigDomain *domain);
void gvir_config_domain_set_name(GVirConfigDomain *domain, const char *name);
+guint64 gvir_config_domain_get_memory(GVirConfigDomain *domain);
+void gvir_config_domain_set_memory(GVirConfigDomain *domain, guint64 memory);
G_END_DECLS
diff --git a/libvirt-gconfig/libvirt-gconfig-object.c
b/libvirt-gconfig/libvirt-gconfig-object.c
index 679c3f9..0de4abf 100644
--- a/libvirt-gconfig/libvirt-gconfig-object.c
+++ b/libvirt-gconfig/libvirt-gconfig-object.c
@@ -322,3 +322,35 @@ void gvir_config_object_set_node_content(GVirConfigObject *object,
}
}
+/* FIXME: how to notify of errors/node not found? */
+guint64 gvir_config_object_get_node_content_uint64(GVirConfigObject *object,
+ const char *node_name)
+{
+ xmlNodePtr node;
+ xmlChar *str;
+ guint64 value;
+
+ node = gvir_config_object_get_xml_node(GVIR_CONFIG_OBJECT(object));
+ if (node == NULL)
+ return 0;
+
+ str = gvir_config_xml_get_child_element_content(node, node_name);
+ if (!str)
+ return 0;
+
+ value = g_ascii_strtoull((char *)str, NULL, 0);
+ xmlFree(str);
+
+ return value;
+}
+
+
+void gvir_config_object_set_node_content_uint64(GVirConfigObject *object,
+ const char *node_name,
+ guint64 value)
+{
+ char *str;
+ str = g_strdup_printf("%"G_GUINT64_FORMAT, value);
+ gvir_config_object_set_node_content(object, node_name, str);
+ g_free(str);
+}
diff --git a/libvirt-gconfig/libvirt-gconfig-object.h
b/libvirt-gconfig/libvirt-gconfig-object.h
index ab99279..c203798 100644
--- a/libvirt-gconfig/libvirt-gconfig-object.h
+++ b/libvirt-gconfig/libvirt-gconfig-object.h
@@ -68,9 +68,14 @@ const gchar *gvir_config_object_get_schema(GVirConfigObject *config);
xmlNodePtr gvir_config_object_get_xml_node(GVirConfigObject *config);
char *gvir_config_object_get_node_content(GVirConfigObject *object,
const char *node_name);
+guint64 gvir_config_object_get_node_content_uint64(GVirConfigObject *object,
+ const char *node_name);
void gvir_config_object_set_node_content(GVirConfigObject *object,
const char *node_name,
const char *value);
+void gvir_config_object_set_node_content_uint64(GVirConfigObject *object,
+ const char *node_name,
+ guint64 value);
/* FIXME: move to a libvirt-gconfig-helpers.h file? */
xmlNodePtr gvir_config_object_parse(const char *xml, const char *root_node, GError
**err);
diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym
index b67d152..7acb95d 100644
--- a/libvirt-gconfig/libvirt-gconfig.sym
+++ b/libvirt-gconfig/libvirt-gconfig.sym
@@ -6,6 +6,8 @@ LIBVIRT_GOBJECT_0.0.1 {
gvir_config_domain_get_type;
gvir_config_domain_new;
gvir_config_domain_new_from_xml;
+ gvir_config_domain_get_memory;
+ gvir_config_domain_set_memory;
gvir_config_domain_get_name;
gvir_config_domain_set_name;
diff --git a/libvirt-gconfig/tests/test-domain-create.c
b/libvirt-gconfig/tests/test-domain-create.c
index a742dd7..fe0063c 100644
--- a/libvirt-gconfig/tests/test-domain-create.c
+++ b/libvirt-gconfig/tests/test-domain-create.c
@@ -44,6 +44,9 @@ int main(void)
g_assert(strcmp(name, "foo") == 0);
g_free(name);
+ gvir_config_domain_set_memory(domain, 1234);
+ g_assert(gvir_config_domain_get_memory(domain) == 1234);
+
xml = gvir_config_object_to_xml(GVIR_CONFIG_OBJECT(domain));
g_print("%s\n", xml);
g_free(xml);
diff --git a/libvirt-gconfig/tests/test-domain-parse.c
b/libvirt-gconfig/tests/test-domain-parse.c
index 545e733..7521d20 100644
--- a/libvirt-gconfig/tests/test-domain-parse.c
+++ b/libvirt-gconfig/tests/test-domain-parse.c
@@ -66,6 +66,9 @@ int main(int argc, char **argv)
g_assert(name != NULL);
g_assert(strcmp(name, "foo") == 0);
g_free(name);
+
+ g_assert(gvir_config_domain_get_memory(domain) == 987654321);
+
g_free(xml);
xml = gvir_config_object_to_xml(GVIR_CONFIG_OBJECT(domain));
diff --git a/libvirt-gconfig/tests/test-domain.xml
b/libvirt-gconfig/tests/test-domain.xml
index 08a926e..d887e95 100644
--- a/libvirt-gconfig/tests/test-domain.xml
+++ b/libvirt-gconfig/tests/test-domain.xml
@@ -2,4 +2,5 @@
<name>foo</name>
<uuid>4dea22b31d52d8f32516782e98ab3fa0</uuid>
<description>Some human readable description</description>
+ <memory>987654321</memory>
</domain>
--
1.7.6.4