On Fri, Oct 07, 2011 at 11:41:07AM +0200, Christophe Fergeau wrote: > --- > 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? */ Most of the properties will have some unused value. So I'd choose to set the value to '0' if node is not found. If '0' is a actually a valid value, then you'll almost certainly be able to use '-1' for missing value instead. > +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> ACK Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list