[libvirt] libvirt-gconfig patches

Here is the 3rd version of my libvirt-gconfig patches, I did the renaming to put all the new classes it introduces in the GVirConfigDomain namespace. GVirConfigDomainSnapshot looks a bit out of place now though... Apart from this, I fixed the other issues that were reported, and rearranged a bit the patches introducing GVirConfigDomainInterfaceNetwork. I've also pushed the first 5 patches that were in v2 since they've already been ack'ed Christophe

-- v3: rename from GVirConfig* to GVirConfigDomain* --- libvirt-gconfig/Makefile.am | 4 + libvirt-gconfig/libvirt-gconfig-domain-clock.c | 81 ++++++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-clock.h | 68 ++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-timer.c | 81 ++++++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-timer.h | 68 ++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig.h | 2 + libvirt-gconfig/libvirt-gconfig.sym | 8 +++ 7 files changed, 312 insertions(+), 0 deletions(-) create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-clock.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-clock.h create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-timer.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-timer.h diff --git a/libvirt-gconfig/Makefile.am b/libvirt-gconfig/Makefile.am index 52eff79..daa99b8 100644 --- a/libvirt-gconfig/Makefile.am +++ b/libvirt-gconfig/Makefile.am @@ -9,7 +9,9 @@ GCONFIG_HEADER_FILES = \ libvirt-gconfig-object.h \ libvirt-gconfig-capabilities.h \ libvirt-gconfig-domain.h \ + libvirt-gconfig-domain-clock.h \ libvirt-gconfig-domain-snapshot.h \ + libvirt-gconfig-domain-timer.h \ libvirt-gconfig-helpers.h \ libvirt-gconfig-interface.h \ libvirt-gconfig-network.h \ @@ -25,7 +27,9 @@ GCONFIG_SOURCE_FILES = \ libvirt-gconfig-object.c \ libvirt-gconfig-capabilities.c \ libvirt-gconfig-domain.c \ + libvirt-gconfig-domain-clock.c \ libvirt-gconfig-domain-snapshot.c \ + libvirt-gconfig-domain-timer.c \ libvirt-gconfig-helpers.c \ libvirt-gconfig-interface.c \ libvirt-gconfig-network.c \ diff --git a/libvirt-gconfig/libvirt-gconfig-domain-clock.c b/libvirt-gconfig/libvirt-gconfig-domain-clock.c new file mode 100644 index 0000000..6642742 --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-clock.c @@ -0,0 +1,81 @@ +/* + * libvirt-gobject-config-domain-clock.c: libvirt glib integration + * + * Copyright (C) 2011 Red Hat + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Christophe Fergeau <cfergeau@redhat.com> + */ + +#include <config.h> + +#include <string.h> + +#include <libxml/tree.h> + +#include "libvirt-gconfig/libvirt-gconfig.h" + +extern gboolean debugFlag; + +#define DEBUG(fmt, ...) do { if (G_UNLIKELY(debugFlag)) g_debug(fmt, ## __VA_ARGS__); } while (0) + +#define GVIR_CONFIG_DOMAIN_CLOCK_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE((obj), GVIR_TYPE_CONFIG_DOMAIN_CLOCK, GVirConfigDomainClockPrivate)) + +struct _GVirConfigDomainClockPrivate +{ + gboolean unused; +}; + +G_DEFINE_TYPE(GVirConfigDomainClock, gvir_config_domain_clock, GVIR_TYPE_CONFIG_OBJECT); + + +static void gvir_config_domain_clock_class_init(GVirConfigDomainClockClass *klass) +{ + g_type_class_add_private(klass, sizeof(GVirConfigDomainClockPrivate)); +} + + +static void gvir_config_domain_clock_init(GVirConfigDomainClock *klock) +{ + GVirConfigDomainClockPrivate *priv; + + DEBUG("Init GVirConfigDomainClock=%p", klock); + + priv = klock->priv = GVIR_CONFIG_DOMAIN_CLOCK_GET_PRIVATE(klock); + + memset(priv, 0, sizeof(*priv)); +} + + +GVirConfigDomainClock *gvir_config_domain_clock_new(void) +{ + GVirConfigObject *object; + + object = gvir_config_object_new(GVIR_TYPE_CONFIG_DOMAIN_CLOCK, + "clock", NULL); + return GVIR_CONFIG_DOMAIN_CLOCK(object); +} + +GVirConfigDomainClock *gvir_config_domain_clock_new_from_xml(const gchar *xml, + GError **error) +{ + GVirConfigObject *object; + + object = gvir_config_object_new_from_xml(GVIR_TYPE_CONFIG_DOMAIN_CLOCK, + "clock", NULL, xml, error); + return GVIR_CONFIG_DOMAIN_CLOCK(object); +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain-clock.h b/libvirt-gconfig/libvirt-gconfig-domain-clock.h new file mode 100644 index 0000000..7b22ff8 --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-clock.h @@ -0,0 +1,68 @@ +/* + * libvirt-gobject-domain-clock.h: libvirt gobject integration + * + * Copyright (C) 2011 Red Hat + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Christophe Fergeau <cfergeau@redhat.com> + */ + +#if !defined(__LIBVIRT_GCONFIG_H__) && !defined(LIBVIRT_GCONFIG_BUILD) +#error "Only <libvirt-gconfig/libvirt-gconfig.h> can be included directly." +#endif + +#ifndef __LIBVIRT_GCONFIG_DOMAIN_CLOCK_H__ +#define __LIBVIRT_GCONFIG_DOMAIN_CLOCK_H__ + +G_BEGIN_DECLS + +#define GVIR_TYPE_CONFIG_DOMAIN_CLOCK (gvir_config_domain_clock_get_type ()) +#define GVIR_CONFIG_DOMAIN_CLOCK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GVIR_TYPE_CONFIG_DOMAIN_CLOCK, GVirConfigDomainClock)) +#define GVIR_CONFIG_DOMAIN_CLOCK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GVIR_TYPE_CONFIG_DOMAIN_CLOCK, GVirConfigDomainClockClass)) +#define GVIR_IS_CONFIG_DOMAIN_CLOCK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GVIR_TYPE_CONFIG_DOMAIN_CLOCK)) +#define GVIR_IS_CONFIG_DOMAIN_CLOCK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GVIR_TYPE_CONFIG_DOMAIN_CLOCK)) +#define GVIR_CONFIG_DOMAIN_CLOCK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GVIR_TYPE_CONFIG_DOMAIN_CLOCK, GVirConfigDomainClockClass)) + +typedef struct _GVirConfigDomainClock GVirConfigDomainClock; +typedef struct _GVirConfigDomainClockPrivate GVirConfigDomainClockPrivate; +typedef struct _GVirConfigDomainClockClass GVirConfigDomainClockClass; + +struct _GVirConfigDomainClock +{ + GVirConfigObject parent; + + GVirConfigDomainClockPrivate *priv; + + /* Do not add fields to this struct */ +}; + +struct _GVirConfigDomainClockClass +{ + GVirConfigObjectClass parent_class; + + gpointer padding[20]; +}; + + +GType gvir_config_domain_clock_get_type(void); + +GVirConfigDomainClock *gvir_config_domain_clock_new(void); +GVirConfigDomainClock *gvir_config_domain_clock_new_from_xml(const gchar *xml, + GError **error); + +G_END_DECLS + +#endif /* __LIBVIRT_GCONFIG_DOMAIN_CLOCK_H__ */ diff --git a/libvirt-gconfig/libvirt-gconfig-domain-timer.c b/libvirt-gconfig/libvirt-gconfig-domain-timer.c new file mode 100644 index 0000000..179d8b2 --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-timer.c @@ -0,0 +1,81 @@ +/* + * libvirt-gobject-config-domain-timer.c: libvirt glib integration + * + * Copyright (C) 2011 Red Hat + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Christophe Fergeau <cfergeau@gmail.com> + */ + +#include <config.h> + +#include <string.h> + +#include <libxml/tree.h> + +#include "libvirt-gconfig/libvirt-gconfig.h" + +extern gboolean debugFlag; + +#define DEBUG(fmt, ...) do { if (G_UNLIKELY(debugFlag)) g_debug(fmt, ## __VA_ARGS__); } while (0) + +#define GVIR_CONFIG_DOMAIN_TIMER_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE((obj), GVIR_TYPE_CONFIG_DOMAIN_TIMER, GVirConfigDomainTimerPrivate)) + +struct _GVirConfigDomainTimerPrivate +{ + gboolean unused; +}; + +G_DEFINE_TYPE(GVirConfigDomainTimer, gvir_config_domain_timer, GVIR_TYPE_CONFIG_OBJECT); + + +static void gvir_config_domain_timer_class_init(GVirConfigDomainTimerClass *klass) +{ + g_type_class_add_private(klass, sizeof(GVirConfigDomainTimerPrivate)); +} + + +static void gvir_config_domain_timer_init(GVirConfigDomainTimer *timer) +{ + GVirConfigDomainTimerPrivate *priv; + + DEBUG("Init GVirConfigDomainTimer=%p", timer); + + priv = timer->priv = GVIR_CONFIG_DOMAIN_TIMER_GET_PRIVATE(timer); + + memset(priv, 0, sizeof(*priv)); +} + + +GVirConfigDomainTimer *gvir_config_domain_timer_new(void) +{ + GVirConfigObject *object; + + object = gvir_config_object_new(GVIR_TYPE_CONFIG_DOMAIN_TIMER, "timer", NULL); + return GVIR_CONFIG_DOMAIN_TIMER(object); +} + + +GVirConfigDomainTimer *gvir_config_domain_timer_new_from_xml(const gchar *xml, + GError **error) +{ + GVirConfigObject *object; + + object = gvir_config_object_new_from_xml(GVIR_TYPE_CONFIG_DOMAIN_TIMER, + "timer", NULL, xml, error); + return GVIR_CONFIG_DOMAIN_TIMER(object); +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain-timer.h b/libvirt-gconfig/libvirt-gconfig-domain-timer.h new file mode 100644 index 0000000..147913f --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-timer.h @@ -0,0 +1,68 @@ +/* + * libvirt-gobject-domain-timer.c: libvirt gobject integration + * + * Copyright (C) 2011 Red Hat + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Christophe Fergeau <cfergeau@gmail.com> + */ + +#if !defined(__LIBVIRT_GCONFIG_H__) && !defined(LIBVIRT_GCONFIG_BUILD) +#error "Only <libvirt-gconfig/libvirt-gconfig.h> can be included directly." +#endif + +#ifndef __LIBVIRT_GCONFIG_DOMAIN_TIMER_H__ +#define __LIBVIRT_GCONFIG_DOMAIN_TIMER_H__ + +G_BEGIN_DECLS + +#define GVIR_TYPE_CONFIG_DOMAIN_TIMER (gvir_config_domain_timer_get_type ()) +#define GVIR_CONFIG_DOMAIN_TIMER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GVIR_TYPE_CONFIG_DOMAIN_TIMER, GVirConfigDomainTimer)) +#define GVIR_CONFIG_DOMAIN_TIMER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GVIR_TYPE_CONFIG_DOMAIN_TIMER, GVirConfigDomainTimerClass)) +#define GVIR_IS_CONFIG_DOMAIN_TIMER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GVIR_TYPE_CONFIG_DOMAIN_TIMER)) +#define GVIR_IS_CONFIG_DOMAIN_TIMER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GVIR_TYPE_CONFIG_DOMAIN_TIMER)) +#define GVIR_CONFIG_DOMAIN_TIMER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GVIR_TYPE_CONFIG_DOMAIN_TIMER, GVirConfigDomainTimerClass)) + +typedef struct _GVirConfigDomainTimer GVirConfigDomainTimer; +typedef struct _GVirConfigDomainTimerPrivate GVirConfigDomainTimerPrivate; +typedef struct _GVirConfigDomainTimerClass GVirConfigDomainTimerClass; + +struct _GVirConfigDomainTimer +{ + GVirConfigObject parent; + + GVirConfigDomainTimerPrivate *priv; + + /* Do not add fields to this struct */ +}; + +struct _GVirConfigDomainTimerClass +{ + GVirConfigObjectClass parent_class; + + gpointer padding[20]; +}; + + +GType gvir_config_domain_timer_get_type(void); + +GVirConfigDomainTimer *gvir_config_domain_timer_new(void); +GVirConfigDomainTimer *gvir_config_domain_timer_new_from_xml(const gchar *xml, + GError **error); + +G_END_DECLS + +#endif /* __LIBVIRT_GCONFIG_DOMAIN_TIMER_H__ */ diff --git a/libvirt-gconfig/libvirt-gconfig.h b/libvirt-gconfig/libvirt-gconfig.h index 4e23f0d..9656f32 100644 --- a/libvirt-gconfig/libvirt-gconfig.h +++ b/libvirt-gconfig/libvirt-gconfig.h @@ -29,7 +29,9 @@ #include <libvirt-gconfig/libvirt-gconfig-object.h> #include <libvirt-gconfig/libvirt-gconfig-capabilities.h> #include <libvirt-gconfig/libvirt-gconfig-domain.h> +#include <libvirt-gconfig/libvirt-gconfig-domain-clock.h> #include <libvirt-gconfig/libvirt-gconfig-domain-snapshot.h> +#include <libvirt-gconfig/libvirt-gconfig-domain-timer.h> #include <libvirt-gconfig/libvirt-gconfig-helpers.h> #include <libvirt-gconfig/libvirt-gconfig-interface.h> #include <libvirt-gconfig/libvirt-gconfig-network.h> diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index 4764fef..9d779b5 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -14,10 +14,18 @@ LIBVIRT_GOBJECT_0.0.1 { gvir_config_domain_get_name; gvir_config_domain_set_name; + gvir_config_domain_clock_get_type; + gvir_config_domain_clock_new; + gvir_config_domain_clock_new_from_xml; + gvir_config_domain_snapshot_get_type; gvir_config_domain_snapshot_new; gvir_config_domain_snapshot_new_from_xml; + gvir_config_domain_timer_get_type; + gvir_config_domain_timer_new; + gvir_config_domain_timer_new_from_xml; + gvir_config_interface_get_type; gvir_config_interface_new; gvir_config_interface_new_from_xml; -- 1.7.7.3

On Wed, Nov 23, 2011 at 02:34:44PM +0100, Christophe Fergeau wrote:
-- v3: rename from GVirConfig* to GVirConfigDomain* --- libvirt-gconfig/Makefile.am | 4 + libvirt-gconfig/libvirt-gconfig-domain-clock.c | 81 ++++++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-clock.h | 68 ++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-timer.c | 81 ++++++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-timer.h | 68 ++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig.h | 2 + libvirt-gconfig/libvirt-gconfig.sym | 8 +++ 7 files changed, 312 insertions(+), 0 deletions(-) create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-clock.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-clock.h create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-timer.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-timer.h
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 :|

-- v2: use g_return_if_fail to test function args for sanity v3: fix typo in gvir_config_domain_clock_set_variable_offset ("timezone" -> "adjustment") --- libvirt-gconfig/libvirt-gconfig-domain-clock.c | 38 ++++++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-clock.h | 5 +++ libvirt-gconfig/libvirt-gconfig.sym | 2 + 3 files changed, 45 insertions(+), 0 deletions(-) diff --git a/libvirt-gconfig/libvirt-gconfig-domain-clock.c b/libvirt-gconfig/libvirt-gconfig-domain-clock.c index 6642742..7c7381b 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-clock.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-clock.c @@ -27,6 +27,7 @@ #include <libxml/tree.h> #include "libvirt-gconfig/libvirt-gconfig.h" +#include "libvirt-gconfig/libvirt-gconfig-object-private.h" extern gboolean debugFlag; @@ -79,3 +80,40 @@ GVirConfigDomainClock *gvir_config_domain_clock_new_from_xml(const gchar *xml, "clock", NULL, xml, error); return GVIR_CONFIG_DOMAIN_CLOCK(object); } + +void gvir_config_domain_clock_set_timezone(GVirConfigDomainClock *klock, + const char *tz) +{ + xmlNodePtr node; + xmlChar *encoded_tz; + + g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_CLOCK(klock)); + g_return_if_fail(tz != NULL); + + node = gvir_config_object_get_xml_node(GVIR_CONFIG_OBJECT(klock)); + if (node == NULL) + return; + + xmlNewProp(node, (xmlChar*)"offset", (xmlChar*)"timezone"); + encoded_tz = xmlEncodeEntitiesReentrant(node->doc, (xmlChar*)tz); + xmlNewProp(node, (xmlChar*)"timezone", encoded_tz); + xmlFree(encoded_tz); +} + +void gvir_config_domain_clock_set_variable_offset(GVirConfigDomainClock *klock, + gint seconds) +{ + xmlNodePtr node; + char *offset_str; + + g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_CLOCK(klock)); + + node = gvir_config_object_replace_child(GVIR_CONFIG_OBJECT(klock), "clock"); + if (node == NULL) + return; + + xmlNewProp(node, (xmlChar*)"offset", (xmlChar*)"variable"); + offset_str = g_strdup_printf("%d", seconds); + xmlNewProp(node, (xmlChar*)"adjustment", (xmlChar*)offset_str); + g_free(offset_str); +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain-clock.h b/libvirt-gconfig/libvirt-gconfig-domain-clock.h index 7b22ff8..588bb10 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-clock.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-clock.h @@ -62,6 +62,11 @@ GType gvir_config_domain_clock_get_type(void); GVirConfigDomainClock *gvir_config_domain_clock_new(void); GVirConfigDomainClock *gvir_config_domain_clock_new_from_xml(const gchar *xml, GError **error); +void gvir_config_domain_clock_set_timezone(GVirConfigDomainClock *klock, + const char *tz); +void gvir_config_domain_clock_set_variable_offset(GVirConfigDomainClock *klock, + gint seconds); + G_END_DECLS diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index 9d779b5..7ee4282 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -17,6 +17,8 @@ LIBVIRT_GOBJECT_0.0.1 { gvir_config_domain_clock_get_type; gvir_config_domain_clock_new; gvir_config_domain_clock_new_from_xml; + gvir_config_domain_clock_set_timezone; + gvir_config_domain_clock_set_variable_offset; gvir_config_domain_snapshot_get_type; gvir_config_domain_snapshot_new; -- 1.7.7.3

On Wed, Nov 23, 2011 at 02:34:45PM +0100, Christophe Fergeau wrote:
-- v2: use g_return_if_fail to test function args for sanity v3: fix typo in gvir_config_domain_clock_set_variable_offset ("timezone" -> "adjustment") --- libvirt-gconfig/libvirt-gconfig-domain-clock.c | 38 ++++++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-clock.h | 5 +++ libvirt-gconfig/libvirt-gconfig.sym | 2 + 3 files changed, 45 insertions(+), 0 deletions(-)
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 :|

The implementation is likely to need to be completed later. We might want to store pointers from GVirConfigDomain to the associated GVirConfigDomainClock, from GVirConfigDomainClock to the GVirConfigDomain that contains it. Since I'm not sure yet if they will be needed, I chose to keep the implementation simple. -- v2: use g_return_if_fail to test function args for sanity --- libvirt-gconfig/libvirt-gconfig-domain.c | 12 ++++++++++++ libvirt-gconfig/libvirt-gconfig-domain.h | 4 ++++ libvirt-gconfig/libvirt-gconfig.sym | 1 + 3 files changed, 17 insertions(+), 0 deletions(-) diff --git a/libvirt-gconfig/libvirt-gconfig-domain.c b/libvirt-gconfig/libvirt-gconfig-domain.c index 5db6bc4..6b55cdf 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain.c +++ b/libvirt-gconfig/libvirt-gconfig-domain.c @@ -237,3 +237,15 @@ void gvir_config_domain_set_features(GVirConfigDomain *domain, } g_object_notify(G_OBJECT(domain), "features"); } + +void gvir_config_domain_set_clock(GVirConfigDomain *domain, + GVirConfigDomainClock *klock) +{ + xmlNodePtr clock_node; + + g_return_if_fail(GVIR_IS_CONFIG_DOMAIN(domain)); + g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_CLOCK(klock)); + + clock_node = gvir_config_object_get_xml_node(GVIR_CONFIG_OBJECT(klock)); + gvir_config_object_set_child(GVIR_CONFIG_OBJECT(domain), clock_node); +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain.h b/libvirt-gconfig/libvirt-gconfig-domain.h index 6cc8f31..67ef432 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain.h +++ b/libvirt-gconfig/libvirt-gconfig-domain.h @@ -27,6 +27,8 @@ #ifndef __LIBVIRT_GCONFIG_DOMAIN_H__ #define __LIBVIRT_GCONFIG_DOMAIN_H__ +#include <libvirt-gconfig/libvirt-gconfig-domain-clock.h> + G_BEGIN_DECLS #define GVIR_TYPE_CONFIG_DOMAIN (gvir_config_domain_get_type ()) @@ -69,6 +71,8 @@ void gvir_config_domain_set_memory(GVirConfigDomain *domain, guint64 memory); GStrv gvir_config_domain_get_features(GVirConfigDomain *domain); void gvir_config_domain_set_features(GVirConfigDomain *domain, const GStrv features); +void gvir_config_domain_set_clock(GVirConfigDomain *domain, + GVirConfigDomainClock *klock); G_END_DECLS diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index 7ee4282..7ba073b 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -7,6 +7,7 @@ LIBVIRT_GOBJECT_0.0.1 { gvir_config_domain_get_type; gvir_config_domain_new; gvir_config_domain_new_from_xml; + gvir_config_domain_set_clock; gvir_config_domain_get_features; gvir_config_domain_set_features; gvir_config_domain_get_memory; -- 1.7.7.3

On Wed, Nov 23, 2011 at 02:34:46PM +0100, Christophe Fergeau wrote:
The implementation is likely to need to be completed later. We might want to store pointers from GVirConfigDomain to the associated GVirConfigDomainClock, from GVirConfigDomainClock to the GVirConfigDomain that contains it. Since I'm not sure yet if they will be needed, I chose to keep the implementation simple.
-- v2: use g_return_if_fail to test function args for sanity --- libvirt-gconfig/libvirt-gconfig-domain.c | 12 ++++++++++++ libvirt-gconfig/libvirt-gconfig-domain.h | 4 ++++ libvirt-gconfig/libvirt-gconfig.sym | 1 + 3 files changed, 17 insertions(+), 0 deletions(-)
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 :|

We don't currently have any enum in our API, but we will need some. This commit adds the generation of libvirt-gconfig-enum-types.[ch] using glib-mkenums. These files will register the various enums that will get added to libvirt-gconfig header files with glib. -- v2: move libvirt-gconfig-enum-types.h to HEADERS in Makefile.am so that it's installed --- configure.ac | 4 ++ libvirt-gconfig/Makefile.am | 23 +++++++++++- .../libvirt-gconfig-enum-types.c.template | 36 ++++++++++++++++++++ .../libvirt-gconfig-enum-types.h.template | 24 +++++++++++++ libvirt-gconfig/libvirt-gconfig.h | 1 + 5 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 libvirt-gconfig/libvirt-gconfig-enum-types.c.template create mode 100644 libvirt-gconfig/libvirt-gconfig-enum-types.h.template diff --git a/configure.ac b/configure.ac index 56110d2..4683daf 100644 --- a/configure.ac +++ b/configure.ac @@ -51,6 +51,10 @@ PKG_CHECK_MODULES(LIBXML2, libxml-2.0 >= $LIBXML2_REQUIRED) GTK_DOC_CHECK([1.10],[--flavour no-tmpl]) +# Setup GLIB_MKENUMS to use glib-mkenums even if GLib is uninstalled. +GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0` +AC_SUBST(GLIB_MKENUMS) + dnl Extra link-time flags for Cygwin. dnl Copied from libxml2 configure.in, but I removed mingw changes dnl for now since I'm not supporting mingw at present. - RWMJ diff --git a/libvirt-gconfig/Makefile.am b/libvirt-gconfig/Makefile.am index daa99b8..641aab3 100644 --- a/libvirt-gconfig/Makefile.am +++ b/libvirt-gconfig/Makefile.am @@ -1,6 +1,9 @@ SUBDIRS = . tests -EXTRA_DIST = libvirt-gconfig.sym +EXTRA_DIST = \ + libvirt-gconfig.sym \ + libvirt-gconfig-enum-types.h.template \ + libvirt-gconfig-enum-types.c.template lib_LTLIBRARIES = libvirt-gconfig-1.0.la @@ -30,6 +33,7 @@ GCONFIG_SOURCE_FILES = \ libvirt-gconfig-domain-clock.c \ libvirt-gconfig-domain-snapshot.c \ libvirt-gconfig-domain-timer.c \ + libvirt-gconfig-enum-types.c \ libvirt-gconfig-helpers.c \ libvirt-gconfig-interface.c \ libvirt-gconfig-network.c \ @@ -41,7 +45,8 @@ GCONFIG_SOURCE_FILES = \ libvirt_gconfig_1_0_ladir = $(includedir)/libvirt-gconfig-1.0/libvirt-gconfig libvirt_gconfig_1_0_la_HEADERS = \ - $(GCONFIG_HEADER_FILES) + $(GCONFIG_HEADER_FILES) \ + libvirt-gconfig-enum-types.h libvirt_gconfig_1_0_la_SOURCES = \ $(libvirt_gconfig_1_0_la_HEADERS) \ $(GCONFIG_SOURCE_FILES) @@ -65,6 +70,20 @@ libvirt_gconfig_1_0_la_LDFLAGS = \ -Wl,--version-script=$(srcdir)/libvirt-gconfig.sym \ -version-info $(LIBVIRT_GLIB_VERSION_INFO) +BUILT_SOURCES = \ + libvirt-gconfig-enum-types.c \ + libvirt-gconfig-enum-types.h + +libvirt-gconfig-enum-types.h: $(GCONFIG_HEADER_FILES) libvirt-gconfig-enum-types.h.template + $(AM_V_GEN) ( cd $(srcdir) \ + && $(GLIB_MKENUMS) --template libvirt-gconfig-enum-types.h.template $(GCONFIG_HEADER_FILES) ) >libvirt-gconfig-enum-types.h.tmp \ + && sed -e "s/G_TYPE_VIR/GVIR_TYPE/" -e "s/g_vir/gvir/" libvirt-gconfig-enum-types.h.tmp >libvirt-gconfig-enum-types.h + +libvirt-gconfig-enum-types.c: $(GCONFIG_HEADER_FILES) libvirt-gconfig-enum-types.c.template + $(AM_V_GEN) ( cd $(srcdir) \ + && $(GLIB_MKENUMS) --template libvirt-gconfig-enum-types.c.template $(GCONFIG_HEADER_FILES) ) >libvirt-gconfig-enum-types.c.tmp \ + && sed -e "s/G_TYPE_VIR/GVIR_TYPE/" -e "s/g_vir/gvir/" libvirt-gconfig-enum-types.c.tmp >libvirt-gconfig-enum-types.c + if WITH_GOBJECT_INTROSPECTION LibvirtGConfig-1.0.gir: libvirt-gconfig-1.0.la $(G_IR_SCANNER) Makefile.am diff --git a/libvirt-gconfig/libvirt-gconfig-enum-types.c.template b/libvirt-gconfig/libvirt-gconfig-enum-types.c.template new file mode 100644 index 0000000..cccea77 --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-enum-types.c.template @@ -0,0 +1,36 @@ +/*** BEGIN file-header ***/ +#include <libvirt-gconfig/libvirt-gconfig.h> + +/*** END file-header ***/ + +/*** BEGIN file-production ***/ +/* enumerations from "@filename@" */ +/*** END file-production ***/ + +/*** BEGIN value-header ***/ +GType +@enum_name@_get_type (void) +{ + static volatile gsize g_define_type_id__volatile = 0; + + if (g_once_init_enter (&g_define_type_id__volatile)) + { + static const G@Type@Value values[] = { +/*** END value-header ***/ + +/*** BEGIN value-production ***/ + { @VALUENAME@, "@VALUENAME@", "@valuenick@" }, +/*** END value-production ***/ + +/*** BEGIN value-tail ***/ + { 0, NULL, NULL } + }; + GType g_define_type_id = + g_@type@_register_static (g_intern_static_string ("@EnumName@"), values); + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + } + + return g_define_type_id__volatile; +} + +/*** END value-tail ***/ diff --git a/libvirt-gconfig/libvirt-gconfig-enum-types.h.template b/libvirt-gconfig/libvirt-gconfig-enum-types.h.template new file mode 100644 index 0000000..2cab1c5 --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-enum-types.h.template @@ -0,0 +1,24 @@ +/*** BEGIN file-header ***/ +#ifndef __LIBVIRT_GCONFIG_ENUM_TYPES_H__ +#define __LIBVIRT_GCONFIG_ENUM_TYPES_H__ + +#include <libvirt-gconfig/libvirt-gconfig.h> + +G_BEGIN_DECLS +/*** END file-header ***/ + +/*** BEGIN file-production ***/ + +/* enumerations from "@filename@" */ +/*** END file-production ***/ + +/*** BEGIN value-header ***/ +GType @enum_name@_get_type (void) G_GNUC_CONST; +#define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type ()) +/*** END value-header ***/ + +/*** BEGIN file-tail ***/ +G_END_DECLS + +#endif /* __LIBVIRT_GCONFIG_ENUM_TYPES_H__ */ +/*** END file-tail ***/ diff --git a/libvirt-gconfig/libvirt-gconfig.h b/libvirt-gconfig/libvirt-gconfig.h index 9656f32..3c00788 100644 --- a/libvirt-gconfig/libvirt-gconfig.h +++ b/libvirt-gconfig/libvirt-gconfig.h @@ -32,6 +32,7 @@ #include <libvirt-gconfig/libvirt-gconfig-domain-clock.h> #include <libvirt-gconfig/libvirt-gconfig-domain-snapshot.h> #include <libvirt-gconfig/libvirt-gconfig-domain-timer.h> +#include <libvirt-gconfig/libvirt-gconfig-enum-types.h> #include <libvirt-gconfig/libvirt-gconfig-helpers.h> #include <libvirt-gconfig/libvirt-gconfig-interface.h> #include <libvirt-gconfig/libvirt-gconfig-network.h> -- 1.7.7.3

On Wed, Nov 23, 2011 at 02:34:47PM +0100, Christophe Fergeau wrote:
We don't currently have any enum in our API, but we will need some. This commit adds the generation of libvirt-gconfig-enum-types.[ch] using glib-mkenums. These files will register the various enums that will get added to libvirt-gconfig header files with glib.
-- v2: move libvirt-gconfig-enum-types.h to HEADERS in Makefile.am so that it's installed --- configure.ac | 4 ++ libvirt-gconfig/Makefile.am | 23 +++++++++++- .../libvirt-gconfig-enum-types.c.template | 36 ++++++++++++++++++++ .../libvirt-gconfig-enum-types.h.template | 24 +++++++++++++ libvirt-gconfig/libvirt-gconfig.h | 1 + 5 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 libvirt-gconfig/libvirt-gconfig-enum-types.c.template create mode 100644 libvirt-gconfig/libvirt-gconfig-enum-types.h.template
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 :|

We will often need to convert from an enum to its string representation, add an helper for that to avoid duplicating that code. -- v2: moved before gvir_config_clock_set_offset implementation since it needs it --- libvirt-gconfig/libvirt-gconfig-domain-clock.c | 17 +++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-clock.h | 8 ++++++++ libvirt-gconfig/libvirt-gconfig-helpers-private.h | 1 + libvirt-gconfig/libvirt-gconfig-helpers.c | 17 +++++++++++++++++ libvirt-gconfig/libvirt-gconfig.sym | 2 ++ 5 files changed, 45 insertions(+), 0 deletions(-) diff --git a/libvirt-gconfig/libvirt-gconfig-domain-clock.c b/libvirt-gconfig/libvirt-gconfig-domain-clock.c index 7c7381b..b414c4f 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-clock.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-clock.c @@ -27,6 +27,7 @@ #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; @@ -81,6 +82,22 @@ GVirConfigDomainClock *gvir_config_domain_clock_new_from_xml(const gchar *xml, return GVIR_CONFIG_DOMAIN_CLOCK(object); } +void gvir_config_domain_clock_set_offset(GVirConfigDomainClock *klock, + GVirConfigDomainClockOffset offset) +{ + xmlNodePtr node; + const char *offset_str; + + g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_CLOCK(klock)); + + node = gvir_config_object_get_xml_node(GVIR_CONFIG_OBJECT(klock)); + g_return_if_fail(node != NULL); + offset_str = gvir_config_genum_get_nick(GVIR_TYPE_CONFIG_DOMAIN_CLOCK_OFFSET, + offset); + g_return_if_fail(offset_str != NULL); + xmlNewProp(node, (xmlChar*)"offset", (xmlChar*)offset_str); +} + void gvir_config_domain_clock_set_timezone(GVirConfigDomainClock *klock, const char *tz) { diff --git a/libvirt-gconfig/libvirt-gconfig-domain-clock.h b/libvirt-gconfig/libvirt-gconfig-domain-clock.h index 588bb10..6a68c24 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-clock.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-clock.h @@ -56,12 +56,20 @@ struct _GVirConfigDomainClockClass gpointer padding[20]; }; +typedef enum { + GVIR_CONFIG_DOMAIN_CLOCK_UTC, + GVIR_CONFIG_DOMAIN_CLOCK_LOCALTIME, + GVIR_CONFIG_DOMAIN_CLOCK_TIMEZONE, + GVIR_CONFIG_DOMAIN_CLOCK_VARIABLE +} GVirConfigDomainClockOffset; GType gvir_config_domain_clock_get_type(void); GVirConfigDomainClock *gvir_config_domain_clock_new(void); GVirConfigDomainClock *gvir_config_domain_clock_new_from_xml(const gchar *xml, GError **error); +void gvir_config_domain_clock_set_offset(GVirConfigDomainClock *klock, + GVirConfigDomainClockOffset offset); void gvir_config_domain_clock_set_timezone(GVirConfigDomainClock *klock, const char *tz); void gvir_config_domain_clock_set_variable_offset(GVirConfigDomainClock *klock, diff --git a/libvirt-gconfig/libvirt-gconfig-helpers-private.h b/libvirt-gconfig/libvirt-gconfig-helpers-private.h index c7a5d6a..59efd24 100644 --- a/libvirt-gconfig/libvirt-gconfig-helpers-private.h +++ b/libvirt-gconfig/libvirt-gconfig-helpers-private.h @@ -40,6 +40,7 @@ xmlChar * gvir_config_xml_get_child_element_content (xmlNode *node, const char *child_name); char *gvir_config_xml_get_child_element_content_glib (xmlNode *node, const char *child_name); +const char *gvir_config_genum_get_nick (GType enum_type, gint value); G_END_DECLS #endif /* __LIBVIRT_GCONFIG_HELPERS_PRIVATE_H__ */ diff --git a/libvirt-gconfig/libvirt-gconfig-helpers.c b/libvirt-gconfig/libvirt-gconfig-helpers.c index 2e28429..d7e1140 100644 --- a/libvirt-gconfig/libvirt-gconfig-helpers.c +++ b/libvirt-gconfig/libvirt-gconfig-helpers.c @@ -178,3 +178,20 @@ gvir_config_xml_get_child_element_content_glib (xmlNode *node, return copy; } + +const char *gvir_config_genum_get_nick (GType enum_type, gint value) +{ + GEnumClass *enum_class; + GEnumValue *enum_value; + + g_return_val_if_fail (G_TYPE_IS_ENUM (enum_type), NULL); + + enum_class = g_type_class_ref(enum_type); + enum_value = g_enum_get_value(enum_class, value); + g_type_class_unref(enum_class); + + if (enum_value != NULL) + return enum_value->value_nick; + + g_return_val_if_reached(NULL); +} diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index 7ba073b..ab4fce8 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -16,8 +16,10 @@ LIBVIRT_GOBJECT_0.0.1 { gvir_config_domain_set_name; gvir_config_domain_clock_get_type; + gvir_config_domain_clock_offset_get_type; gvir_config_domain_clock_new; gvir_config_domain_clock_new_from_xml; + gvir_config_domain_clock_set_offset; gvir_config_domain_clock_set_timezone; gvir_config_domain_clock_set_variable_offset; -- 1.7.7.3

On Wed, Nov 23, 2011 at 02:34:48PM +0100, Christophe Fergeau wrote:
We will often need to convert from an enum to its string representation, add an helper for that to avoid duplicating that code.
-- v2: moved before gvir_config_clock_set_offset implementation since it needs it --- libvirt-gconfig/libvirt-gconfig-domain-clock.c | 17 +++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-clock.h | 8 ++++++++ libvirt-gconfig/libvirt-gconfig-helpers-private.h | 1 + libvirt-gconfig/libvirt-gconfig-helpers.c | 17 +++++++++++++++++ libvirt-gconfig/libvirt-gconfig.sym | 2 ++ 5 files changed, 45 insertions(+), 0 deletions(-)
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 :|

--- libvirt-gconfig/tests/test-domain-create.c | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-) diff --git a/libvirt-gconfig/tests/test-domain-create.c b/libvirt-gconfig/tests/test-domain-create.c index a719ed2..1b00036 100644 --- a/libvirt-gconfig/tests/test-domain-create.c +++ b/libvirt-gconfig/tests/test-domain-create.c @@ -33,6 +33,7 @@ const char *features[] = { "foo", "bar", "baz", NULL }; int main(void) { GVirConfigDomain *domain; + GVirConfigDomainClock *klock; char *name; GStrv feat; unsigned int i; @@ -59,6 +60,10 @@ int main(void) } g_strfreev(feat); + klock = gvir_config_domain_clock_new(); + gvir_config_domain_clock_set_offset(klock, GVIR_CONFIG_DOMAIN_CLOCK_UTC); + gvir_config_domain_set_clock(domain, klock); + xml = gvir_config_object_to_xml(GVIR_CONFIG_OBJECT(domain)); g_print("%s\n", xml); g_free(xml); -- 1.7.7.3

On Wed, Nov 23, 2011 at 02:34:49PM +0100, Christophe Fergeau wrote:
--- libvirt-gconfig/tests/test-domain-create.c | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-)
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 :|

-- v3: rename from GVirConfigOs to GVirConfigDomainOs --- libvirt-gconfig/Makefile.am | 2 + libvirt-gconfig/libvirt-gconfig-domain-os.c | 79 +++++++++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-os.h | 67 +++++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig.h | 3 +- libvirt-gconfig/libvirt-gconfig.sym | 4 ++ 5 files changed, 154 insertions(+), 1 deletions(-) create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-os.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-os.h diff --git a/libvirt-gconfig/Makefile.am b/libvirt-gconfig/Makefile.am index 641aab3..1c65755 100644 --- a/libvirt-gconfig/Makefile.am +++ b/libvirt-gconfig/Makefile.am @@ -13,6 +13,7 @@ GCONFIG_HEADER_FILES = \ libvirt-gconfig-capabilities.h \ libvirt-gconfig-domain.h \ libvirt-gconfig-domain-clock.h \ + libvirt-gconfig-domain-os.h \ libvirt-gconfig-domain-snapshot.h \ libvirt-gconfig-domain-timer.h \ libvirt-gconfig-helpers.h \ @@ -31,6 +32,7 @@ GCONFIG_SOURCE_FILES = \ libvirt-gconfig-capabilities.c \ libvirt-gconfig-domain.c \ libvirt-gconfig-domain-clock.c \ + libvirt-gconfig-domain-os.c \ libvirt-gconfig-domain-snapshot.c \ libvirt-gconfig-domain-timer.c \ libvirt-gconfig-enum-types.c \ diff --git a/libvirt-gconfig/libvirt-gconfig-domain-os.c b/libvirt-gconfig/libvirt-gconfig-domain-os.c new file mode 100644 index 0000000..7c8bfbb --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-os.c @@ -0,0 +1,79 @@ +/* + * libvirt-gobject-config-domain-os.c: libvirt glib integration + * + * Copyright (C) 2011 Red Hat + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Christophe Fergeau <cfergeau@gmail.com> + */ + +#include <config.h> + +#include <string.h> + +#include <libxml/tree.h> + +#include "libvirt-gconfig/libvirt-gconfig.h" + +extern gboolean debugFlag; + +#define DEBUG(fmt, ...) do { if (G_UNLIKELY(debugFlag)) g_debug(fmt, ## __VA_ARGS__); } while (0) + +#define GVIR_CONFIG_DOMAIN_OS_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE((obj), GVIR_TYPE_CONFIG_DOMAIN_OS, GVirConfigDomainOsPrivate)) + +struct _GVirConfigDomainOsPrivate +{ + gboolean unused; +}; + +G_DEFINE_TYPE(GVirConfigDomainOs, gvir_config_domain_os, GVIR_TYPE_CONFIG_OBJECT); + + +static void gvir_config_domain_os_class_init(GVirConfigDomainOsClass *klass) +{ + g_type_class_add_private(klass, sizeof(GVirConfigDomainOsPrivate)); +} + + +static void gvir_config_domain_os_init(GVirConfigDomainOs *os) +{ + GVirConfigDomainOsPrivate *priv; + + DEBUG("Init GVirConfigDomainOs=%p", os); + + priv = os->priv = GVIR_CONFIG_DOMAIN_OS_GET_PRIVATE(os); + + memset(priv, 0, sizeof(*priv)); +} + + +GVirConfigDomainOs *gvir_config_domain_os_new(void) +{ + GVirConfigObject *object; + + object = gvir_config_object_new(GVIR_TYPE_CONFIG_DOMAIN_OS, "os", NULL); + return GVIR_CONFIG_DOMAIN_OS(object); +} + +GVirConfigDomainOs *gvir_config_domain_os_new_from_xml(const gchar *xml, GError **error) +{ + GVirConfigObject *object; + + object = gvir_config_object_new_from_xml(GVIR_TYPE_CONFIG_DOMAIN_OS, "os", + NULL, xml, error); + return GVIR_CONFIG_DOMAIN_OS(object); +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain-os.h b/libvirt-gconfig/libvirt-gconfig-domain-os.h new file mode 100644 index 0000000..8d5d6a9 --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-os.h @@ -0,0 +1,67 @@ +/* + * libvirt-gobject-domain-os.c: libvirt gobject integration + * + * Copyright (C) 2011 Red Hat + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Christophe Fergeau <cfergeau@gmail.com> + */ + +#if !defined(__LIBVIRT_GCONFIG_H__) && !defined(LIBVIRT_GCONFIG_BUILD) +#error "Only <libvirt-gconfig/libvirt-gconfig.h> can be included directly." +#endif + +#ifndef __LIBVIRT_GCONFIG_DOMAIN_OS_H__ +#define __LIBVIRT_GCONFIG_DOMAIN_OS_H__ + +G_BEGIN_DECLS + +#define GVIR_TYPE_CONFIG_DOMAIN_OS (gvir_config_domain_os_get_type ()) +#define GVIR_CONFIG_DOMAIN_OS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GVIR_TYPE_CONFIG_DOMAIN_OS, GVirConfigDomainOs)) +#define GVIR_CONFIG_DOMAIN_OS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GVIR_TYPE_CONFIG_DOMAIN_OS, GVirConfigDomainOsClass)) +#define GVIR_IS_CONFIG_DOMAIN_OS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GVIR_TYPE_CONFIG_DOMAIN_OS)) +#define GVIR_IS_CONFIG_DOMAIN_OS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GVIR_TYPE_CONFIG_DOMAIN_OS)) +#define GVIR_CONFIG_DOMAIN_OS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GVIR_TYPE_CONFIG_DOMAIN_OS, GVirConfigDomainOsClass)) + +typedef struct _GVirConfigDomainOs GVirConfigDomainOs; +typedef struct _GVirConfigDomainOsPrivate GVirConfigDomainOsPrivate; +typedef struct _GVirConfigDomainOsClass GVirConfigDomainOsClass; + +struct _GVirConfigDomainOs +{ + GVirConfigObject parent; + + GVirConfigDomainOsPrivate *priv; + + /* Do not add fields to this struct */ +}; + +struct _GVirConfigDomainOsClass +{ + GVirConfigObjectClass parent_class; + + gpointer padding[20]; +}; + + +GType gvir_config_domain_os_get_type(void); + +GVirConfigDomainOs *gvir_config_domain_os_new(void); +GVirConfigDomainOs *gvir_config_domain_os_new_from_xml(const gchar *xml, GError **error); + +G_END_DECLS + +#endif /* __LIBVIRT_GCONFIG_DOMAIN_OS_H__ */ diff --git a/libvirt-gconfig/libvirt-gconfig.h b/libvirt-gconfig/libvirt-gconfig.h index 3c00788..c9d06cf 100644 --- a/libvirt-gconfig/libvirt-gconfig.h +++ b/libvirt-gconfig/libvirt-gconfig.h @@ -30,14 +30,15 @@ #include <libvirt-gconfig/libvirt-gconfig-capabilities.h> #include <libvirt-gconfig/libvirt-gconfig-domain.h> #include <libvirt-gconfig/libvirt-gconfig-domain-clock.h> +#include <libvirt-gconfig/libvirt-gconfig-domain-os.h> #include <libvirt-gconfig/libvirt-gconfig-domain-snapshot.h> #include <libvirt-gconfig/libvirt-gconfig-domain-timer.h> #include <libvirt-gconfig/libvirt-gconfig-enum-types.h> #include <libvirt-gconfig/libvirt-gconfig-helpers.h> #include <libvirt-gconfig/libvirt-gconfig-interface.h> #include <libvirt-gconfig/libvirt-gconfig-network.h> -#include <libvirt-gconfig/libvirt-gconfig-node-device.h> #include <libvirt-gconfig/libvirt-gconfig-network-filter.h> +#include <libvirt-gconfig/libvirt-gconfig-node-device.h> #include <libvirt-gconfig/libvirt-gconfig-secret.h> #include <libvirt-gconfig/libvirt-gconfig-storage-pool.h> #include <libvirt-gconfig/libvirt-gconfig-storage-vol.h> diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index ab4fce8..ed04457 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -23,6 +23,10 @@ LIBVIRT_GOBJECT_0.0.1 { gvir_config_domain_clock_set_timezone; gvir_config_domain_clock_set_variable_offset; + gvir_config_domain_os_get_type; + gvir_config_domain_os_new; + gvir_config_domain_os_new_from_xml; + gvir_config_domain_snapshot_get_type; gvir_config_domain_snapshot_new; gvir_config_domain_snapshot_new_from_xml; -- 1.7.7.3

On Wed, Nov 23, 2011 at 02:34:50PM +0100, Christophe Fergeau wrote:
-- v3: rename from GVirConfigOs to GVirConfigDomainOs --- libvirt-gconfig/Makefile.am | 2 + libvirt-gconfig/libvirt-gconfig-domain-os.c | 79 +++++++++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-os.h | 67 +++++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig.h | 3 +- libvirt-gconfig/libvirt-gconfig.sym | 4 ++ 5 files changed, 154 insertions(+), 1 deletions(-) create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-os.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-os.h
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 :|

-- v2: merged several related commits use safer g_strcmp0 for string comparison use g_return_if_fail to test function args for sanity --- libvirt-gconfig/libvirt-gconfig-domain-os.c | 142 +++++++++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-os.h | 27 +++++ libvirt-gconfig/libvirt-gconfig.sym | 10 ++ 3 files changed, 179 insertions(+), 0 deletions(-) diff --git a/libvirt-gconfig/libvirt-gconfig-domain-os.c b/libvirt-gconfig/libvirt-gconfig-domain-os.c index 7c8bfbb..412ed41 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-os.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-os.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; @@ -77,3 +79,143 @@ GVirConfigDomainOs *gvir_config_domain_os_new_from_xml(const gchar *xml, GError NULL, xml, error); return GVIR_CONFIG_DOMAIN_OS(object); } + +void gvir_config_domain_os_set_os_type(GVirConfigDomainOs *os, + GVirConfigDomainOsType type) +{ + xmlNodePtr node; + const char *type_str; + + g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_OS(os)); + + node = gvir_config_object_replace_child(GVIR_CONFIG_OBJECT(os), "type"); + g_return_if_fail(node != NULL); + type_str = gvir_config_genum_get_nick(GVIR_TYPE_CONFIG_DOMAIN_OS_TYPE, type); + g_return_if_fail(type_str != NULL); + xmlNodeSetContent(node, (xmlChar*)type_str); +} + +void gvir_config_domain_os_set_loader(GVirConfigDomainOs *os, + const char * loader) +{ + gvir_config_object_set_node_content(GVIR_CONFIG_OBJECT(os), + "loader", loader); +} + +void gvir_config_domain_os_enable_boot_menu(GVirConfigDomainOs *os, + gboolean enable) +{ + xmlNodePtr node; + + g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_OS(os)); + + node = gvir_config_object_replace_child(GVIR_CONFIG_OBJECT(os), "bootmenu"); + g_return_if_fail(node != NULL); + if (enable) + xmlNewProp(node, (xmlChar*)"enable", (xmlChar*)"yes"); + else + xmlNewProp(node, (xmlChar*)"enable", (xmlChar*)"no"); +} + +void gvir_config_domain_os_bios_enable_serial(GVirConfigDomainOs *os, + gboolean enable) +{ + xmlNodePtr node; + + g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_OS(os)); + + node = gvir_config_object_replace_child(GVIR_CONFIG_OBJECT(os), "bios"); + g_return_if_fail(node != NULL); + if (enable) + xmlNewProp(node, (xmlChar*)"useserial", (xmlChar*)"yes"); + else + xmlNewProp(node, (xmlChar*)"useserial", (xmlChar*)"no"); +} + +void gvir_config_domain_os_set_smbios_mode(GVirConfigDomainOs *os, + GVirConfigDomainOsSmBiosMode mode) +{ + xmlNodePtr node; + const char *mode_str; + + g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_OS(os)); + + node = gvir_config_object_replace_child(GVIR_CONFIG_OBJECT(os), "smbios"); + g_return_if_fail(node != NULL); + mode_str = gvir_config_genum_get_nick(GVIR_TYPE_CONFIG_DOMAIN_OS_SM_BIOS_MODE, + mode); + if (mode_str != NULL) + xmlNewProp(node, (xmlChar*)"mode", (xmlChar*)mode_str); +} + +/** + * gvir_config_domain_os_set_boot_devices: + * @boot_devices: (in) (element-type LibvirtGConfig.DomainOsBootDevice): + */ +void gvir_config_domain_os_set_boot_devices(GVirConfigDomainOs *os, GList *boot_devices) +{ + GList *it; + xmlNodePtr os_node; + xmlNodePtr node; + + g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_OS(os)); + + os_node = gvir_config_object_get_xml_node(GVIR_CONFIG_OBJECT(os)); + g_return_if_fail(os_node != NULL); + + node = os_node->children; + while (node != NULL) { + xmlNodePtr next_node; + next_node = node->next; + if (g_strcmp0("boot", (char *)node->name) == 0) { + xmlUnlinkNode(node); + xmlFreeNode(node); + } + node = next_node; + } + + for (it = boot_devices; it != NULL; it = it->next) { + const char *dev; + + dev = gvir_config_genum_get_nick(GVIR_TYPE_CONFIG_DOMAIN_OS_BOOT_DEVICE, + GPOINTER_TO_INT(it->data)); + g_warn_if_fail(dev != NULL); + if (dev != NULL) { + node = xmlNewDocNode(NULL, NULL, (xmlChar*)"boot", NULL); + xmlNewProp(node, (xmlChar*)"dev", (xmlChar*)dev); + xmlAddChild(os_node, node); + } + } +} + +void gvir_config_domain_os_set_arch(GVirConfigDomainOs *os, const char *arch) +{ + xmlNodePtr os_node; + xmlNodePtr os_type_node; + + g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_OS(os)); + + os_node = gvir_config_object_get_xml_node(GVIR_CONFIG_OBJECT(os)); + g_return_if_fail(os_node != NULL); + + os_type_node = gvir_config_xml_get_element(os_node, "type", NULL); + g_return_if_fail(os_type_node != NULL); + + xmlNewProp(os_type_node, (xmlChar*)"arch", (xmlChar*)arch); +} + +void gvir_config_domain_os_set_machine(GVirConfigDomainOs *os, const char *machine) +{ + xmlNodePtr os_node; + xmlNodePtr os_type_node; + + g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_OS(os)); + + os_node = gvir_config_object_get_xml_node(GVIR_CONFIG_OBJECT(os)); + g_return_if_fail(os_node != NULL); + + os_type_node = gvir_config_xml_get_element(os_node, "type", NULL); + g_return_if_fail(os_type_node != NULL); + + xmlNewProp(os_type_node, (xmlChar*)"machine", (xmlChar*)machine); +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain-os.h b/libvirt-gconfig/libvirt-gconfig-domain-os.h index 8d5d6a9..1522744 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-os.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-os.h @@ -56,12 +56,39 @@ struct _GVirConfigDomainOsClass gpointer padding[20]; }; +typedef enum { + GVIR_CONFIG_DOMAIN_OS_TYPE_HVM, + GVIR_CONFIG_DOMAIN_OS_TYPE_LINUX +} GVirConfigDomainOsType; + +typedef enum { + GVIR_CONFIG_DOMAIN_OS_SMBIOS_MODE_EMULATE, + GVIR_CONFIG_DOMAIN_OS_SMBIOS_MODE_HOST, + GVIR_CONFIG_DOMAIN_OS_SMBIOS_MODE_SYSINFO +} GVirConfigDomainOsSmBiosMode; + +typedef enum { + GVIR_CONFIG_DOMAIN_OS_BOOT_DEVICE_FD, + GVIR_CONFIG_DOMAIN_OS_BOOT_DEVICE_HD, + GVIR_CONFIG_DOMAIN_OS_BOOT_DEVICE_CDROM, + GVIR_CONFIG_DOMAIN_OS_BOOT_DEVICE_NETWORK +} GVirConfigDomainOsBootDevice; GType gvir_config_domain_os_get_type(void); GVirConfigDomainOs *gvir_config_domain_os_new(void); GVirConfigDomainOs *gvir_config_domain_os_new_from_xml(const gchar *xml, GError **error); +void gvir_config_domain_os_set_os_type(GVirConfigDomainOs *os, GVirConfigDomainOsType type); +void gvir_config_domain_os_set_arch(GVirConfigDomainOs *os, const char *arch); +void gvir_config_domain_os_set_boot_devices(GVirConfigDomainOs *os, GList *boot_devices); +void gvir_config_domain_os_set_loader(GVirConfigDomainOs *os, const char * loader); +void gvir_config_domain_os_set_machine(GVirConfigDomainOs *os, const char *machine); +void gvir_config_domain_os_set_smbios_mode(GVirConfigDomainOs *os, + GVirConfigDomainOsSmBiosMode mode); +void gvir_config_domain_os_enable_boot_menu(GVirConfigDomainOs *os, gboolean enable); +void gvir_config_domain_os_bios_enable_serial(GVirConfigDomainOs *os, gboolean enable); + G_END_DECLS #endif /* __LIBVIRT_GCONFIG_DOMAIN_OS_H__ */ diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index ed04457..83e4e0c 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -24,8 +24,18 @@ LIBVIRT_GOBJECT_0.0.1 { gvir_config_domain_clock_set_variable_offset; gvir_config_domain_os_get_type; + gvir_config_domain_os_boot_device_get_type; + gvir_config_domain_os_sm_bios_mode_get_type; gvir_config_domain_os_new; gvir_config_domain_os_new_from_xml; + gvir_config_domain_os_set_os_type; + gvir_config_domain_os_set_boot_devices; + gvir_config_domain_os_set_loader; + gvir_config_domain_os_set_smbios_mode; + gvir_config_domain_os_enable_boot_menu; + gvir_config_domain_os_bios_enable_serial; + gvir_config_domain_os_set_machine; + gvir_config_domain_os_set_arch; gvir_config_domain_snapshot_get_type; gvir_config_domain_snapshot_new; -- 1.7.7.3

On Wed, Nov 23, 2011 at 02:34:51PM +0100, Christophe Fergeau wrote:
-- v2: merged several related commits use safer g_strcmp0 for string comparison use g_return_if_fail to test function args for sanity --- libvirt-gconfig/libvirt-gconfig-domain-os.c | 142 +++++++++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-os.h | 27 +++++ libvirt-gconfig/libvirt-gconfig.sym | 10 ++ 3 files changed, 179 insertions(+), 0 deletions(-)
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 :|

-- v2: use g_return_if_fail to test function args for sanity --- libvirt-gconfig/libvirt-gconfig-domain.c | 12 ++++++++++++ libvirt-gconfig/libvirt-gconfig-domain.h | 3 +++ libvirt-gconfig/libvirt-gconfig.sym | 1 + 3 files changed, 16 insertions(+), 0 deletions(-) diff --git a/libvirt-gconfig/libvirt-gconfig-domain.c b/libvirt-gconfig/libvirt-gconfig-domain.c index 6b55cdf..8fb1c11 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain.c +++ b/libvirt-gconfig/libvirt-gconfig-domain.c @@ -249,3 +249,15 @@ void gvir_config_domain_set_clock(GVirConfigDomain *domain, clock_node = gvir_config_object_get_xml_node(GVIR_CONFIG_OBJECT(klock)); gvir_config_object_set_child(GVIR_CONFIG_OBJECT(domain), clock_node); } + +void gvir_config_domain_set_os(GVirConfigDomain *domain, + GVirConfigDomainOs *os) +{ + xmlNodePtr os_node; + + g_return_if_fail(GVIR_IS_CONFIG_DOMAIN(domain)); + g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_OS(os)); + + os_node = gvir_config_object_get_xml_node(GVIR_CONFIG_OBJECT(os)); + gvir_config_object_set_child(GVIR_CONFIG_OBJECT(domain), os_node); +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain.h b/libvirt-gconfig/libvirt-gconfig-domain.h index 67ef432..2f33988 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain.h +++ b/libvirt-gconfig/libvirt-gconfig-domain.h @@ -28,6 +28,7 @@ #define __LIBVIRT_GCONFIG_DOMAIN_H__ #include <libvirt-gconfig/libvirt-gconfig-domain-clock.h> +#include <libvirt-gconfig/libvirt-gconfig-domain-os.h> G_BEGIN_DECLS @@ -73,6 +74,8 @@ void gvir_config_domain_set_features(GVirConfigDomain *domain, const GStrv features); void gvir_config_domain_set_clock(GVirConfigDomain *domain, GVirConfigDomainClock *klock); +void gvir_config_domain_set_os(GVirConfigDomain *domain, + GVirConfigDomainOs *os); G_END_DECLS diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index 83e4e0c..ba9e051 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -8,6 +8,7 @@ LIBVIRT_GOBJECT_0.0.1 { gvir_config_domain_new; gvir_config_domain_new_from_xml; gvir_config_domain_set_clock; + gvir_config_domain_set_os; gvir_config_domain_get_features; gvir_config_domain_set_features; gvir_config_domain_get_memory; -- 1.7.7.3

On Wed, Nov 23, 2011 at 02:34:52PM +0100, Christophe Fergeau wrote:
-- v2: use g_return_if_fail to test function args for sanity --- libvirt-gconfig/libvirt-gconfig-domain.c | 12 ++++++++++++ libvirt-gconfig/libvirt-gconfig-domain.h | 3 +++ libvirt-gconfig/libvirt-gconfig.sym | 1 + 3 files changed, 16 insertions(+), 0 deletions(-)
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 :|

--- libvirt-gconfig/tests/test-domain-create.c | 19 ++++++++++++++++++- 1 files changed, 18 insertions(+), 1 deletions(-) diff --git a/libvirt-gconfig/tests/test-domain-create.c b/libvirt-gconfig/tests/test-domain-create.c index 1b00036..6823ebc 100644 --- a/libvirt-gconfig/tests/test-domain-create.c +++ b/libvirt-gconfig/tests/test-domain-create.c @@ -33,7 +33,6 @@ const char *features[] = { "foo", "bar", "baz", NULL }; int main(void) { GVirConfigDomain *domain; - GVirConfigDomainClock *klock; char *name; GStrv feat; unsigned int i; @@ -60,10 +59,28 @@ int main(void) } g_strfreev(feat); + /* clock node */ + GVirConfigDomainClock *klock; + klock = gvir_config_domain_clock_new(); gvir_config_domain_clock_set_offset(klock, GVIR_CONFIG_DOMAIN_CLOCK_UTC); gvir_config_domain_set_clock(domain, klock); + /* os node */ + GVirConfigDomainOs *os; + GList *devices = NULL; + + os = gvir_config_domain_os_new(); + gvir_config_domain_os_set_os_type(os, GVIR_CONFIG_DOMAIN_OS_TYPE_HVM); + gvir_config_domain_os_set_arch(os, "x86_64"); + devices = g_list_append(devices, + GINT_TO_POINTER(GVIR_CONFIG_DOMAIN_OS_BOOT_DEVICE_CDROM)); + devices = g_list_append(devices, + GINT_TO_POINTER(GVIR_CONFIG_DOMAIN_OS_BOOT_DEVICE_NETWORK)); + gvir_config_domain_os_set_boot_devices(os, devices); + g_list_free(devices); + gvir_config_domain_set_os(domain, os); + xml = gvir_config_object_to_xml(GVIR_CONFIG_OBJECT(domain)); g_print("%s\n", xml); g_free(xml); -- 1.7.7.3

On Wed, Nov 23, 2011 at 02:34:53PM +0100, Christophe Fergeau wrote:
--- libvirt-gconfig/tests/test-domain-create.c | 19 ++++++++++++++++++- 1 files changed, 18 insertions(+), 1 deletions(-)
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 :|

--- libvirt-gconfig/libvirt-gconfig-domain.c | 29 ++++++++++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain.h | 3 ++ libvirt-gconfig/libvirt-gconfig.sym | 2 + libvirt-gconfig/tests/test-domain-create.c | 1 + 4 files changed, 35 insertions(+), 0 deletions(-) diff --git a/libvirt-gconfig/libvirt-gconfig-domain.c b/libvirt-gconfig/libvirt-gconfig-domain.c index 8fb1c11..3f84b5f 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain.c +++ b/libvirt-gconfig/libvirt-gconfig-domain.c @@ -47,6 +47,7 @@ enum { PROP_0, PROP_NAME, PROP_MEMORY, + PROP_VCPU, PROP_FEATURES }; @@ -64,6 +65,9 @@ static void gvir_config_domain_get_property(GObject *object, case PROP_MEMORY: g_value_set_uint64(value, gvir_config_domain_get_memory(domain)); break; + case PROP_VCPU: + g_value_set_uint64(value, gvir_config_domain_get_vcpus(domain)); + break; case PROP_FEATURES: g_value_take_boxed(value, gvir_config_domain_get_features(domain)); break; @@ -87,6 +91,9 @@ static void gvir_config_domain_set_property(GObject *object, case PROP_MEMORY: gvir_config_domain_set_memory(domain, g_value_get_uint64(value)); break; + case PROP_VCPU: + gvir_config_domain_set_vcpus(domain, g_value_get_uint64(value)); + break; case PROP_FEATURES: gvir_config_domain_set_features(domain, g_value_get_boxed(value)); break; @@ -123,6 +130,15 @@ static void gvir_config_domain_class_init(GVirConfigDomainClass *klass) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property(object_class, + PROP_VCPU, + g_param_spec_uint64("vcpu", + "Virtual CPUs", + "Maximum Number of Guest Virtual CPUs", + 0, G_MAXUINT64, + 1, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); + g_object_class_install_property(object_class, PROP_FEATURES, g_param_spec_boxed("features", "Features", @@ -193,6 +209,19 @@ void gvir_config_domain_set_memory(GVirConfigDomain *domain, guint64 memory) g_object_notify(G_OBJECT(domain), "memory"); } +guint64 gvir_config_domain_get_vcpus(GVirConfigDomain *domain) +{ + return gvir_config_object_get_node_content_uint64(GVIR_CONFIG_OBJECT(domain), + "vcpu"); +} + +void gvir_config_domain_set_vcpus(GVirConfigDomain *domain, guint64 vcpu_count) +{ + gvir_config_object_set_node_content_uint64(GVIR_CONFIG_OBJECT(domain), + "vcpu", vcpu_count); + g_object_notify(G_OBJECT(domain), "vcpu"); +} + /** * gvir_config_domain_get_features: * Returns: (transfer full): diff --git a/libvirt-gconfig/libvirt-gconfig-domain.h b/libvirt-gconfig/libvirt-gconfig-domain.h index 2f33988..4989901 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain.h +++ b/libvirt-gconfig/libvirt-gconfig-domain.h @@ -69,6 +69,9 @@ 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); +guint64 gvir_config_domain_get_vcpus(GVirConfigDomain *domain); +void gvir_config_domain_set_vcpus(GVirConfigDomain *domain, + guint64 vcpu_count); GStrv gvir_config_domain_get_features(GVirConfigDomain *domain); void gvir_config_domain_set_features(GVirConfigDomain *domain, const GStrv features); diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index ba9e051..bb8568b 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -15,6 +15,8 @@ LIBVIRT_GOBJECT_0.0.1 { gvir_config_domain_set_memory; gvir_config_domain_get_name; gvir_config_domain_set_name; + gvir_config_domain_get_vcpus; + gvir_config_domain_set_vcpus; gvir_config_domain_clock_get_type; gvir_config_domain_clock_offset_get_type; diff --git a/libvirt-gconfig/tests/test-domain-create.c b/libvirt-gconfig/tests/test-domain-create.c index 6823ebc..6e59f6f 100644 --- a/libvirt-gconfig/tests/test-domain-create.c +++ b/libvirt-gconfig/tests/test-domain-create.c @@ -49,6 +49,7 @@ int main(void) g_free(name); gvir_config_domain_set_memory(domain, 1234); + gvir_config_domain_set_vcpus(domain, 3); g_assert(gvir_config_domain_get_memory(domain) == 1234); gvir_config_domain_set_features(domain, (const GStrv)features); -- 1.7.7.3

On Wed, Nov 23, 2011 at 02:34:54PM +0100, Christophe Fergeau wrote:
--- libvirt-gconfig/libvirt-gconfig-domain.c | 29 ++++++++++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain.h | 3 ++ libvirt-gconfig/libvirt-gconfig.sym | 2 + libvirt-gconfig/tests/test-domain-create.c | 1 + 4 files changed, 35 insertions(+), 0 deletions(-)
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 :|

This is an abstract type which will be used as a base class for all objects stored in the <devices> section of a domain. -- v3: rename to GVirConfigDomainDevice --- libvirt-gconfig/Makefile.am | 2 + libvirt-gconfig/libvirt-gconfig-domain-device.c | 61 +++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-device.h | 64 +++++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 3 + 5 files changed, 131 insertions(+), 0 deletions(-) create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-device.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-device.h diff --git a/libvirt-gconfig/Makefile.am b/libvirt-gconfig/Makefile.am index 1c65755..b5cbd7c 100644 --- a/libvirt-gconfig/Makefile.am +++ b/libvirt-gconfig/Makefile.am @@ -13,6 +13,7 @@ GCONFIG_HEADER_FILES = \ libvirt-gconfig-capabilities.h \ libvirt-gconfig-domain.h \ libvirt-gconfig-domain-clock.h \ + libvirt-gconfig-domain-device.h \ libvirt-gconfig-domain-os.h \ libvirt-gconfig-domain-snapshot.h \ libvirt-gconfig-domain-timer.h \ @@ -32,6 +33,7 @@ GCONFIG_SOURCE_FILES = \ libvirt-gconfig-capabilities.c \ libvirt-gconfig-domain.c \ libvirt-gconfig-domain-clock.c \ + libvirt-gconfig-domain-device.c \ libvirt-gconfig-domain-os.c \ libvirt-gconfig-domain-snapshot.c \ libvirt-gconfig-domain-timer.c \ diff --git a/libvirt-gconfig/libvirt-gconfig-domain-device.c b/libvirt-gconfig/libvirt-gconfig-domain-device.c new file mode 100644 index 0000000..63cf289 --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-device.c @@ -0,0 +1,61 @@ +/* + * libvirt-gobject-config-domain-device.c: libvirt glib integration + * + * Copyright (C) 2011 Red Hat + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Christophe Fergeau <cfergeau@gmail.com> + */ + +#include <config.h> + +#include <string.h> + +#include <libxml/tree.h> + +#include "libvirt-gconfig/libvirt-gconfig.h" + +extern gboolean debugFlag; + +#define DEBUG(fmt, ...) do { if (G_UNLIKELY(debugFlag)) g_debug(fmt, ## __VA_ARGS__); } while (0) + +#define GVIR_CONFIG_DOMAIN_DEVICE_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE((obj), GVIR_TYPE_CONFIG_DOMAIN_DEVICE, GVirConfigDomainDevicePrivate)) + +struct _GVirConfigDomainDevicePrivate +{ + gboolean unused; +}; + +G_DEFINE_ABSTRACT_TYPE(GVirConfigDomainDevice, gvir_config_domain_device, GVIR_TYPE_CONFIG_OBJECT); + + +static void gvir_config_domain_device_class_init(GVirConfigDomainDeviceClass *klass) +{ + g_type_class_add_private(klass, sizeof(GVirConfigDomainDevicePrivate)); +} + + +static void gvir_config_domain_device_init(GVirConfigDomainDevice *device) +{ + GVirConfigDomainDevicePrivate *priv; + + DEBUG("Init GVirConfigDomainDevice=%p", device); + + priv = device->priv = GVIR_CONFIG_DOMAIN_DEVICE_GET_PRIVATE(device); + + memset(priv, 0, sizeof(*priv)); +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain-device.h b/libvirt-gconfig/libvirt-gconfig-domain-device.h new file mode 100644 index 0000000..ba15cbb --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-device.h @@ -0,0 +1,64 @@ +/* + * libvirt-gobject-domain-device.c: libvirt gobject integration + * + * Copyright (C) 2011 Red Hat + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Christophe Fergeau <cfergeau@gmail.com> + */ + +#if !defined(__LIBVIRT_GCONFIG_H__) && !defined(LIBVIRT_GCONFIG_BUILD) +#error "Only <libvirt-gconfig/libvirt-gconfig.h> can be included directly." +#endif + +#ifndef __LIBVIRT_GCONFIG_DOMAIN_DEVICE_H__ +#define __LIBVIRT_GCONFIG_DOMAIN_DEVICE_H__ + +G_BEGIN_DECLS + +#define GVIR_TYPE_CONFIG_DOMAIN_DEVICE (gvir_config_domain_device_get_type ()) +#define GVIR_CONFIG_DOMAIN_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GVIR_TYPE_CONFIG_DOMAIN_DEVICE, GVirConfigDomainDevice)) +#define GVIR_CONFIG_DOMAIN_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GVIR_TYPE_CONFIG_DOMAIN_DEVICE, GVirConfigDomainDeviceClass)) +#define GVIR_IS_CONFIG_DOMAIN_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GVIR_TYPE_CONFIG_DOMAIN_DEVICE)) +#define GVIR_IS_CONFIG_DOMAIN_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GVIR_TYPE_CONFIG_DOMAIN_DEVICE)) +#define GVIR_CONFIG_DOMAIN_DEVICE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GVIR_TYPE_CONFIG_DOMAIN_DEVICE, GVirConfigDomainDeviceClass)) + +typedef struct _GVirConfigDomainDevice GVirConfigDomainDevice; +typedef struct _GVirConfigDomainDevicePrivate GVirConfigDomainDevicePrivate; +typedef struct _GVirConfigDomainDeviceClass GVirConfigDomainDeviceClass; + +struct _GVirConfigDomainDevice +{ + GVirConfigObject parent; + + GVirConfigDomainDevicePrivate *priv; + + /* Do not add fields to this struct */ +}; + +struct _GVirConfigDomainDeviceClass +{ + GVirConfigObjectClass parent_class; + + gpointer padding[20]; +}; + + +GType gvir_config_domain_device_get_type(void); + +G_END_DECLS + +#endif /* __LIBVIRT_GCONFIG_DOMAIN_DEVICE_H__ */ diff --git a/libvirt-gconfig/libvirt-gconfig.h b/libvirt-gconfig/libvirt-gconfig.h index c9d06cf..c3f8603 100644 --- a/libvirt-gconfig/libvirt-gconfig.h +++ b/libvirt-gconfig/libvirt-gconfig.h @@ -30,6 +30,7 @@ #include <libvirt-gconfig/libvirt-gconfig-capabilities.h> #include <libvirt-gconfig/libvirt-gconfig-domain.h> #include <libvirt-gconfig/libvirt-gconfig-domain-clock.h> +#include <libvirt-gconfig/libvirt-gconfig-domain-device.h> #include <libvirt-gconfig/libvirt-gconfig-domain-os.h> #include <libvirt-gconfig/libvirt-gconfig-domain-snapshot.h> #include <libvirt-gconfig/libvirt-gconfig-domain-timer.h> diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index bb8568b..bfdd125 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -4,6 +4,7 @@ LIBVIRT_GOBJECT_0.0.1 { gvir_config_capabilities_new; gvir_config_capabilities_new_from_xml; + gvir_config_domain_get_type; gvir_config_domain_new; gvir_config_domain_new_from_xml; @@ -26,6 +27,8 @@ LIBVIRT_GOBJECT_0.0.1 { gvir_config_domain_clock_set_timezone; gvir_config_domain_clock_set_variable_offset; + gvir_config_domain_device_get_type; + gvir_config_domain_os_get_type; gvir_config_domain_os_boot_device_get_type; gvir_config_domain_os_sm_bios_mode_get_type; -- 1.7.7.3

On Wed, Nov 23, 2011 at 02:34:55PM +0100, Christophe Fergeau wrote:
This is an abstract type which will be used as a base class for all objects stored in the <devices> section of a domain.
-- v3: rename to GVirConfigDomainDevice --- libvirt-gconfig/Makefile.am | 2 + libvirt-gconfig/libvirt-gconfig-domain-device.c | 61 +++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-device.h | 64 +++++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 3 + 5 files changed, 131 insertions(+), 0 deletions(-) create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-device.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-device.h
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 :|

-- v3: rename to GVirConfigDomainDisk --- libvirt-gconfig/Makefile.am | 2 + libvirt-gconfig/libvirt-gconfig-domain-disk.c | 81 +++++++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-disk.h | 68 +++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 5 +- 5 files changed, 156 insertions(+), 1 deletions(-) create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-disk.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-disk.h diff --git a/libvirt-gconfig/Makefile.am b/libvirt-gconfig/Makefile.am index b5cbd7c..4945554 100644 --- a/libvirt-gconfig/Makefile.am +++ b/libvirt-gconfig/Makefile.am @@ -14,6 +14,7 @@ GCONFIG_HEADER_FILES = \ libvirt-gconfig-domain.h \ libvirt-gconfig-domain-clock.h \ libvirt-gconfig-domain-device.h \ + libvirt-gconfig-domain-disk.h \ libvirt-gconfig-domain-os.h \ libvirt-gconfig-domain-snapshot.h \ libvirt-gconfig-domain-timer.h \ @@ -34,6 +35,7 @@ GCONFIG_SOURCE_FILES = \ libvirt-gconfig-domain.c \ libvirt-gconfig-domain-clock.c \ libvirt-gconfig-domain-device.c \ + libvirt-gconfig-domain-disk.c \ libvirt-gconfig-domain-os.c \ libvirt-gconfig-domain-snapshot.c \ libvirt-gconfig-domain-timer.c \ diff --git a/libvirt-gconfig/libvirt-gconfig-domain-disk.c b/libvirt-gconfig/libvirt-gconfig-domain-disk.c new file mode 100644 index 0000000..41f456b --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-disk.c @@ -0,0 +1,81 @@ +/* + * libvirt-gobject-config-domain-disk.c: libvirt glib integration + * + * Copyright (C) 2011 Red Hat + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Christophe Fergeau <cfergeau@gmail.com> + */ + +#include <config.h> + +#include <string.h> + +#include <libxml/tree.h> + +#include "libvirt-gconfig/libvirt-gconfig.h" + +extern gboolean debugFlag; + +#define DEBUG(fmt, ...) do { if (G_UNLIKELY(debugFlag)) g_debug(fmt, ## __VA_ARGS__); } while (0) + +#define GVIR_CONFIG_DOMAIN_DISK_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE((obj), GVIR_TYPE_CONFIG_DOMAIN_DISK, GVirConfigDomainDiskPrivate)) + +struct _GVirConfigDomainDiskPrivate +{ + gboolean unused; +}; + +G_DEFINE_TYPE(GVirConfigDomainDisk, gvir_config_domain_disk, GVIR_TYPE_CONFIG_DOMAIN_DEVICE); + + +static void gvir_config_domain_disk_class_init(GVirConfigDomainDiskClass *klass) +{ + g_type_class_add_private(klass, sizeof(GVirConfigDomainDiskPrivate)); +} + + +static void gvir_config_domain_disk_init(GVirConfigDomainDisk *disk) +{ + GVirConfigDomainDiskPrivate *priv; + + DEBUG("Init GVirConfigDomainDisk=%p", disk); + + priv = disk->priv = GVIR_CONFIG_DOMAIN_DISK_GET_PRIVATE(disk); + + memset(priv, 0, sizeof(*priv)); +} + + +GVirConfigDomainDisk *gvir_config_domain_disk_new(void) +{ + GVirConfigObject *object; + + object = gvir_config_object_new(GVIR_TYPE_CONFIG_DOMAIN_DISK, + "disk", NULL); + return GVIR_CONFIG_DOMAIN_DISK(object); +} + +GVirConfigDomainDisk *gvir_config_domain_disk_new_from_xml(const gchar *xml, + GError **error) +{ + GVirConfigObject *object; + + object = gvir_config_object_new_from_xml(GVIR_TYPE_CONFIG_DOMAIN_DISK, + "disk", NULL, xml, error); + return GVIR_CONFIG_DOMAIN_DISK(object); +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain-disk.h b/libvirt-gconfig/libvirt-gconfig-domain-disk.h new file mode 100644 index 0000000..98835f7 --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-disk.h @@ -0,0 +1,68 @@ +/* + * libvirt-gobject-domain-disk.c: libvirt gobject integration + * + * Copyright (C) 2011 Red Hat + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Christophe Fergeau <cfergeau@gmail.com> + */ + +#if !defined(__LIBVIRT_GCONFIG_H__) && !defined(LIBVIRT_GCONFIG_BUILD) +#error "Only <libvirt-gconfig/libvirt-gconfig.h> can be included directly." +#endif + +#ifndef __LIBVIRT_GCONFIG_DOMAIN_DISK_H__ +#define __LIBVIRT_GCONFIG_DOMAIN_DISK_H__ + +G_BEGIN_DECLS + +#define GVIR_TYPE_CONFIG_DOMAIN_DISK (gvir_config_domain_disk_get_type ()) +#define GVIR_CONFIG_DOMAIN_DISK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GVIR_TYPE_CONFIG_DOMAIN_DISK, GVirConfigDomainDisk)) +#define GVIR_CONFIG_DOMAIN_DISK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GVIR_TYPE_CONFIG_DOMAIN_DISK, GVirConfigDomainDiskClass)) +#define GVIR_IS_CONFIG_DOMAIN_DISK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GVIR_TYPE_CONFIG_DOMAIN_DISK)) +#define GVIR_IS_CONFIG_DOMAIN_DISK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GVIR_TYPE_CONFIG_DOMAIN_DISK)) +#define GVIR_CONFIG_DOMAIN_DISK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GVIR_TYPE_CONFIG_DOMAIN_DISK, GVirConfigDomainDiskClass)) + +typedef struct _GVirConfigDomainDisk GVirConfigDomainDisk; +typedef struct _GVirConfigDomainDiskPrivate GVirConfigDomainDiskPrivate; +typedef struct _GVirConfigDomainDiskClass GVirConfigDomainDiskClass; + +struct _GVirConfigDomainDisk +{ + GVirConfigDomainDevice parent; + + GVirConfigDomainDiskPrivate *priv; + + /* Do not add fields to this struct */ +}; + +struct _GVirConfigDomainDiskClass +{ + GVirConfigDomainDeviceClass parent_class; + + gpointer padding[20]; +}; + + +GType gvir_config_domain_disk_get_type(void); + +GVirConfigDomainDisk *gvir_config_domain_disk_new(void); +GVirConfigDomainDisk *gvir_config_domain_disk_new_from_xml(const gchar *xml, + GError **error); + +G_END_DECLS + +#endif /* __LIBVIRT_GCONFIG_DOMAIN_DISK_H__ */ diff --git a/libvirt-gconfig/libvirt-gconfig.h b/libvirt-gconfig/libvirt-gconfig.h index c3f8603..5d1d8dd 100644 --- a/libvirt-gconfig/libvirt-gconfig.h +++ b/libvirt-gconfig/libvirt-gconfig.h @@ -31,6 +31,7 @@ #include <libvirt-gconfig/libvirt-gconfig-domain.h> #include <libvirt-gconfig/libvirt-gconfig-domain-clock.h> #include <libvirt-gconfig/libvirt-gconfig-domain-device.h> +#include <libvirt-gconfig/libvirt-gconfig-domain-disk.h> #include <libvirt-gconfig/libvirt-gconfig-domain-os.h> #include <libvirt-gconfig/libvirt-gconfig-domain-snapshot.h> #include <libvirt-gconfig/libvirt-gconfig-domain-timer.h> diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index bfdd125..1bc03ec 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -4,7 +4,6 @@ LIBVIRT_GOBJECT_0.0.1 { gvir_config_capabilities_new; gvir_config_capabilities_new_from_xml; - gvir_config_domain_get_type; gvir_config_domain_new; gvir_config_domain_new_from_xml; @@ -29,6 +28,10 @@ LIBVIRT_GOBJECT_0.0.1 { gvir_config_domain_device_get_type; + gvir_config_domain_disk_get_type; + gvir_config_domain_disk_new; + gvir_config_domain_disk_new_from_xml; + gvir_config_domain_os_get_type; gvir_config_domain_os_boot_device_get_type; gvir_config_domain_os_sm_bios_mode_get_type; -- 1.7.7.3

On Wed, Nov 23, 2011 at 02:34:56PM +0100, Christophe Fergeau wrote:
-- v3: rename to GVirConfigDomainDisk --- libvirt-gconfig/Makefile.am | 2 + libvirt-gconfig/libvirt-gconfig-domain-disk.c | 81 +++++++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-disk.h | 68 +++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 5 +- 5 files changed, 156 insertions(+), 1 deletions(-) create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-disk.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-disk.h
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 :|

-- 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

On Wed, Nov 23, 2011 at 02:34:57PM +0100, Christophe Fergeau wrote:
-- 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(-)
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 :|

-- v2: use g_return_if_fail to test function args for sanity --- libvirt-gconfig/libvirt-gconfig-domain.c | 23 +++++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain.h | 2 ++ libvirt-gconfig/libvirt-gconfig.sym | 3 ++- 3 files changed, 27 insertions(+), 1 deletions(-) diff --git a/libvirt-gconfig/libvirt-gconfig-domain.c b/libvirt-gconfig/libvirt-gconfig-domain.c index 3f84b5f..6cee46f 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain.c +++ b/libvirt-gconfig/libvirt-gconfig-domain.c @@ -290,3 +290,26 @@ void gvir_config_domain_set_os(GVirConfigDomain *domain, os_node = gvir_config_object_get_xml_node(GVIR_CONFIG_OBJECT(os)); gvir_config_object_set_child(GVIR_CONFIG_OBJECT(domain), os_node); } + +/** + * gvir_config_domain_set_devices: + * @devices: (in) (element-type LibvirtGConfig.DomainDevice): + */ +void gvir_config_domain_set_devices(GVirConfigDomain *domain, + GList *devices) +{ + xmlNodePtr devices_node; + GList *it; + + g_return_if_fail(GVIR_IS_CONFIG_DOMAIN(domain)); + + devices_node = gvir_config_object_replace_child(GVIR_CONFIG_OBJECT(domain), + "devices"); + for (it = devices; it != NULL; it = it->next) { + GVirConfigDomainDevice *device = GVIR_CONFIG_DOMAIN_DEVICE(it->data); + xmlNodePtr node; + + node = gvir_config_object_get_xml_node(GVIR_CONFIG_OBJECT(device)); + xmlAddChild(devices_node, node); + } +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain.h b/libvirt-gconfig/libvirt-gconfig-domain.h index 4989901..08682aa 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain.h +++ b/libvirt-gconfig/libvirt-gconfig-domain.h @@ -79,6 +79,8 @@ void gvir_config_domain_set_clock(GVirConfigDomain *domain, GVirConfigDomainClock *klock); void gvir_config_domain_set_os(GVirConfigDomain *domain, GVirConfigDomainOs *os); +void gvir_config_domain_set_devices(GVirConfigDomain *domain, + GList *devices); G_END_DECLS diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index 258c1f3..44c2e11 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -8,13 +8,14 @@ LIBVIRT_GOBJECT_0.0.1 { gvir_config_domain_new; gvir_config_domain_new_from_xml; gvir_config_domain_set_clock; - gvir_config_domain_set_os; + gvir_config_domain_set_devices; gvir_config_domain_get_features; gvir_config_domain_set_features; gvir_config_domain_get_memory; gvir_config_domain_set_memory; gvir_config_domain_get_name; gvir_config_domain_set_name; + gvir_config_domain_set_os; gvir_config_domain_get_vcpus; gvir_config_domain_set_vcpus; -- 1.7.7.3

On Wed, Nov 23, 2011 at 02:34:58PM +0100, Christophe Fergeau wrote:
-- v2: use g_return_if_fail to test function args for sanity --- libvirt-gconfig/libvirt-gconfig-domain.c | 23 +++++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain.h | 2 ++ libvirt-gconfig/libvirt-gconfig.sym | 3 ++- 3 files changed, 27 insertions(+), 1 deletions(-)
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 :|

It's similar to gvir_config_object_replace_child except that if the current node already has a child with the correct name, it returns the existing child instead of replacing it. -- v2: instead of adding an argument to gvir_config_object_new_child, split the function in 2 separate ones, gvir_config_object_add_child and gvir_config_object_replace_child. use g_return_if_fail to test function args for sanity --- libvirt-gconfig/libvirt-gconfig-object-private.h | 2 ++ libvirt-gconfig/libvirt-gconfig-object.c | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 0 deletions(-) diff --git a/libvirt-gconfig/libvirt-gconfig-object-private.h b/libvirt-gconfig/libvirt-gconfig-object-private.h index a14a792..0cedaef 100644 --- a/libvirt-gconfig/libvirt-gconfig-object-private.h +++ b/libvirt-gconfig/libvirt-gconfig-object-private.h @@ -35,6 +35,8 @@ void gvir_config_object_set_node_content(GVirConfigObject *object, void gvir_config_object_set_node_content_uint64(GVirConfigObject *object, const char *node_name, guint64 value); +xmlNodePtr gvir_config_object_add_child(GVirConfigObject *object, + const char *child_name); xmlNodePtr gvir_config_object_replace_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 ac10e88..142d714 100644 --- a/libvirt-gconfig/libvirt-gconfig-object.c +++ b/libvirt-gconfig/libvirt-gconfig-object.c @@ -333,6 +333,26 @@ gvir_config_object_set_child(GVirConfigObject *object, xmlNodePtr child) } G_GNUC_INTERNAL xmlNodePtr +gvir_config_object_add_child(GVirConfigObject *object, + const char *child_name) +{ + xmlNodePtr new_node; + xmlNodePtr old_node; + + g_return_val_if_fail(GVIR_IS_CONFIG_OBJECT(object), NULL); + + new_node = xmlNewDocNode(NULL, NULL, (xmlChar *)child_name, NULL); + old_node = gvir_config_object_set_child_internal(object, new_node, + FALSE); + if (old_node != NULL) { + xmlFreeNode(new_node); + return old_node; + } + + return new_node; +} + +G_GNUC_INTERNAL xmlNodePtr gvir_config_object_replace_child(GVirConfigObject *object, const char *child_name) { -- 1.7.7.3

On Wed, Nov 23, 2011 at 02:34:59PM +0100, Christophe Fergeau wrote:
It's similar to gvir_config_object_replace_child except that if the current node already has a child with the correct name, it returns the existing child instead of replacing it.
-- v2: instead of adding an argument to gvir_config_object_new_child, split the function in 2 separate ones, gvir_config_object_add_child and gvir_config_object_replace_child. use g_return_if_fail to test function args for sanity --- libvirt-gconfig/libvirt-gconfig-object-private.h | 2 ++ libvirt-gconfig/libvirt-gconfig-object.c | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 0 deletions(-)
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 :|

-- v2: fix gvir_config_device_disk_set_source use g_return_if_fail to test function args for sanity --- libvirt-gconfig/libvirt-gconfig-domain-disk.c | 78 ++++++++++++++++++++++++- libvirt-gconfig/libvirt-gconfig-domain-disk.h | 11 +++- libvirt-gconfig/libvirt-gconfig.sym | 7 ++- 3 files changed, 93 insertions(+), 3 deletions(-) diff --git a/libvirt-gconfig/libvirt-gconfig-domain-disk.c b/libvirt-gconfig/libvirt-gconfig-domain-disk.c index cf7e481..25810c5 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-disk.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-disk.c @@ -39,7 +39,7 @@ extern gboolean debugFlag; struct _GVirConfigDomainDiskPrivate { - gboolean unused; + GVirConfigDomainDiskType type; }; G_DEFINE_TYPE(GVirConfigDomainDisk, gvir_config_domain_disk, GVIR_TYPE_CONFIG_DOMAIN_DEVICE); @@ -96,6 +96,7 @@ void gvir_config_domain_disk_set_type(GVirConfigDomainDisk *disk, type); g_return_if_fail(type_str != NULL); xmlNewProp(node, (xmlChar*)"type", (xmlChar*)type_str); + disk->priv->type = type; } void gvir_config_domain_disk_set_guest_device_type(GVirConfigDomainDisk *disk, @@ -129,3 +130,78 @@ void gvir_config_domain_disk_set_snapshot_type(GVirConfigDomainDisk *disk, g_return_if_fail(type_str != NULL); xmlNewProp(node, (xmlChar*)"snapshot", (xmlChar*)type_str); } + +void gvir_config_domain_disk_set_source(GVirConfigDomainDisk *disk, + const char *source) +{ + xmlNodePtr 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(source_node != NULL); + + switch (disk->priv->type) { + case GVIR_CONFIG_DOMAIN_DISK_FILE: + attribute_name = "file"; + break; + case GVIR_CONFIG_DOMAIN_DISK_BLOCK: + attribute_name = "dev"; + break; + case GVIR_CONFIG_DOMAIN_DISK_DIR: + attribute_name = "dir"; + break; + case GVIR_CONFIG_DOMAIN_DISK_NETWORK: + attribute_name = "protocol"; + break; + default: + g_return_if_reached(); + } + xmlNewProp(source_node, (xmlChar*)attribute_name, (xmlChar*)source); +} + +void gvir_config_domain_disk_set_driver_name(GVirConfigDomainDisk *disk, + const char *driver_name) +{ + xmlNodePtr 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(node != NULL); + xmlNewProp(node, (xmlChar*)"name", (xmlChar*)driver_name); + +} + +void gvir_config_domain_disk_set_driver_type(GVirConfigDomainDisk *disk, + const char *driver_type) +{ + xmlNodePtr 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(node != NULL); + xmlNewProp(node, (xmlChar*)"type", (xmlChar*)driver_type); +} + +void gvir_config_domain_disk_set_target_bus(GVirConfigDomainDisk *disk, + const char *bus) +{ + xmlNodePtr 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(node != NULL); + xmlNewProp(node, (xmlChar*)"bus", (xmlChar*)bus); +} + +void gvir_config_domain_disk_set_target_dev(GVirConfigDomainDisk *disk, + const char *dev) +{ + xmlNodePtr 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(node != NULL); + xmlNewProp(node, (xmlChar*)"dev", (xmlChar*)dev); +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain-disk.h b/libvirt-gconfig/libvirt-gconfig-domain-disk.h index e9428ea..a02c817 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-disk.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-disk.h @@ -87,7 +87,16 @@ 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); - +void gvir_config_domain_disk_set_source(GVirConfigDomainDisk *disk, + const char *source); +void gvir_config_domain_disk_set_driver_name(GVirConfigDomainDisk *disk, + const char *driver_name); +void gvir_config_domain_disk_set_driver_type(GVirConfigDomainDisk *disk, + const char *driver_type); +void gvir_config_domain_disk_set_target_bus(GVirConfigDomainDisk *disk, + const char *bus); +void gvir_config_domain_disk_set_target_dev(GVirConfigDomainDisk *disk, + const char *dev); G_END_DECLS #endif /* __LIBVIRT_GCONFIG_DOMAIN_DISK_H__ */ diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index 44c2e11..eb3a6a8 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -35,8 +35,13 @@ LIBVIRT_GOBJECT_0.0.1 { 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_driver_name; + gvir_config_domain_disk_set_driver_type; gvir_config_domain_disk_set_guest_device_type; + gvir_config_domain_disk_set_snapshot_type; + gvir_config_domain_disk_set_source; + gvir_config_domain_disk_set_target_bus; + gvir_config_domain_disk_set_target_dev; gvir_config_domain_disk_set_type; gvir_config_domain_os_get_type; -- 1.7.7.3

On Wed, Nov 23, 2011 at 02:35:00PM +0100, Christophe Fergeau wrote:
-- v2: fix gvir_config_device_disk_set_source use g_return_if_fail to test function args for sanity --- libvirt-gconfig/libvirt-gconfig-domain-disk.c | 78 ++++++++++++++++++++++++- libvirt-gconfig/libvirt-gconfig-domain-disk.h | 11 +++- libvirt-gconfig/libvirt-gconfig.sym | 7 ++- 3 files changed, 93 insertions(+), 3 deletions(-)
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 :|

--- libvirt-gconfig/tests/test-domain-create.c | 19 +++++++++++++++++++ 1 files changed, 19 insertions(+), 0 deletions(-) diff --git a/libvirt-gconfig/tests/test-domain-create.c b/libvirt-gconfig/tests/test-domain-create.c index 6e59f6f..38a7fb9 100644 --- a/libvirt-gconfig/tests/test-domain-create.c +++ b/libvirt-gconfig/tests/test-domain-create.c @@ -80,8 +80,27 @@ int main(void) GINT_TO_POINTER(GVIR_CONFIG_DOMAIN_OS_BOOT_DEVICE_NETWORK)); gvir_config_domain_os_set_boot_devices(os, devices); g_list_free(devices); + devices = NULL; gvir_config_domain_set_os(domain, os); + /* disk node */ + GVirConfigDomainDisk *disk; + + disk = gvir_config_domain_disk_new(); + gvir_config_domain_disk_set_type(disk, GVIR_CONFIG_DOMAIN_DISK_FILE); + gvir_config_domain_disk_set_guest_device_type(disk, GVIR_CONFIG_DOMAIN_DISK_GUEST_DEVICE_DISK); + gvir_config_domain_disk_set_source(disk, "/tmp/foo/bar"); + gvir_config_domain_disk_set_driver_name(disk, "qemu"); + gvir_config_domain_disk_set_driver_type(disk, "qcow2"); + gvir_config_domain_disk_set_target_bus(disk, "ide"); + gvir_config_domain_disk_set_target_dev(disk, "hda"); + + devices = g_list_append(devices, disk); + gvir_config_domain_set_devices(domain, devices); + g_list_free(devices); + devices = NULL; + + xml = gvir_config_object_to_xml(GVIR_CONFIG_OBJECT(domain)); g_print("%s\n", xml); g_free(xml); -- 1.7.7.3

On Wed, Nov 23, 2011 at 02:35:01PM +0100, Christophe Fergeau wrote:
--- libvirt-gconfig/tests/test-domain-create.c | 19 +++++++++++++++++++ 1 files changed, 19 insertions(+), 0 deletions(-)
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 :|

This base class is mainly useful as a generic type when we manipulate list of interfaces regardless of their actual type. -- v3: rename to GVirConfigDomainInterface since GVirConfigInterface has a different purpose --- libvirt-gconfig/Makefile.am | 2 + libvirt-gconfig/libvirt-gconfig-domain-interface.c | 60 ++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-interface.h | 64 ++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 2 + 5 files changed, 129 insertions(+), 0 deletions(-) create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-interface.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-interface.h diff --git a/libvirt-gconfig/Makefile.am b/libvirt-gconfig/Makefile.am index 4945554..a797db0 100644 --- a/libvirt-gconfig/Makefile.am +++ b/libvirt-gconfig/Makefile.am @@ -15,6 +15,7 @@ GCONFIG_HEADER_FILES = \ libvirt-gconfig-domain-clock.h \ libvirt-gconfig-domain-device.h \ libvirt-gconfig-domain-disk.h \ + libvirt-gconfig-domain-interface.h \ libvirt-gconfig-domain-os.h \ libvirt-gconfig-domain-snapshot.h \ libvirt-gconfig-domain-timer.h \ @@ -36,6 +37,7 @@ GCONFIG_SOURCE_FILES = \ libvirt-gconfig-domain-clock.c \ libvirt-gconfig-domain-device.c \ libvirt-gconfig-domain-disk.c \ + libvirt-gconfig-domain-interface.c \ libvirt-gconfig-domain-os.c \ libvirt-gconfig-domain-snapshot.c \ libvirt-gconfig-domain-timer.c \ diff --git a/libvirt-gconfig/libvirt-gconfig-domain-interface.c b/libvirt-gconfig/libvirt-gconfig-domain-interface.c new file mode 100644 index 0000000..ecabfae --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-interface.c @@ -0,0 +1,60 @@ +/* + * libvirt-gobject-config-domain-interface.c: libvirt glib integration + * + * Copyright (C) 2008 Daniel P. Berrange + * Copyright (C) 2010 Red Hat + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Daniel P. Berrange <berrange@redhat.com> + */ + +#include <config.h> + +#include <string.h> + +#include "libvirt-gconfig/libvirt-gconfig.h" + +extern gboolean debugFlag; + +#define DEBUG(fmt, ...) do { if (G_UNLIKELY(debugFlag)) g_debug(fmt, ## __VA_ARGS__); } while (0) + +#define GVIR_CONFIG_DOMAIN_INTERFACE_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE((obj), GVIR_TYPE_CONFIG_DOMAIN_INTERFACE, GVirConfigDomainInterfacePrivate)) + +struct _GVirConfigDomainInterfacePrivate +{ + gboolean unused; +}; + +G_DEFINE_ABSTRACT_TYPE(GVirConfigDomainInterface, gvir_config_domain_interface, GVIR_TYPE_CONFIG_DOMAIN_DEVICE); + + +static void gvir_config_domain_interface_class_init(GVirConfigDomainInterfaceClass *klass) +{ + g_type_class_add_private(klass, sizeof(GVirConfigDomainInterfacePrivate)); +} + + +static void gvir_config_domain_interface_init(GVirConfigDomainInterface *interface) +{ + GVirConfigDomainInterfacePrivate *priv; + + DEBUG("Init GVirConfigDomainInterface=%p", interface); + + priv = interface->priv = GVIR_CONFIG_DOMAIN_INTERFACE_GET_PRIVATE(interface); + + memset(priv, 0, sizeof(*priv)); +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain-interface.h b/libvirt-gconfig/libvirt-gconfig-domain-interface.h new file mode 100644 index 0000000..cf60936 --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-interface.h @@ -0,0 +1,64 @@ +/* + * libvirt-gconfig-domain-interface.h: libvirt gobject integration + * + * Copyright (C) 2010 Red Hat + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Daniel P. Berrange <berrange@redhat.com> + */ + +#if !defined(__LIBVIRT_GCONFIG_H__) && !defined(LIBVIRT_GCONFIG_BUILD) +#error "Only <libvirt-gconfig/libvirt-gconfig.h> can be included directly." +#endif + +#ifndef __LIBVIRT_GCONFIG_DOMAIN_INTERFACE_H__ +#define __LIBVIRT_GCONFIG_DOMAIN_INTERFACE_H__ + +G_BEGIN_DECLS + +#define GVIR_TYPE_CONFIG_DOMAIN_INTERFACE (gvir_config_domain_interface_get_type ()) +#define GVIR_CONFIG_DOMAIN_INTERFACE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GVIR_TYPE_CONFIG_DOMAIN_INTERFACE, GVirConfigDomainInterface)) +#define GVIR_CONFIG_DOMAIN_INTERFACE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GVIR_TYPE_CONFIG_DOMAIN_INTERFACE, GVirConfigDomainInterfaceClass)) +#define GVIR_IS_CONFIG_DOMAIN_INTERFACE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GVIR_TYPE_CONFIG_DOMAIN_INTERFACE)) +#define GVIR_IS_CONFIG_DOMAIN_INTERFACE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GVIR_TYPE_CONFIG_DOMAIN_INTERFACE)) +#define GVIR_CONFIG_DOMAIN_INTERFACE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GVIR_TYPE_CONFIG_DOMAIN_INTERFACE, GVirConfigDomainInterfaceClass)) + +typedef struct _GVirConfigDomainInterface GVirConfigDomainInterface; +typedef struct _GVirConfigDomainInterfacePrivate GVirConfigDomainInterfacePrivate; +typedef struct _GVirConfigDomainInterfaceClass GVirConfigDomainInterfaceClass; + +struct _GVirConfigDomainInterface +{ + GVirConfigDomainDevice parent; + + GVirConfigDomainInterfacePrivate *priv; + + /* Do not add fields to this struct */ +}; + +struct _GVirConfigDomainInterfaceClass +{ + GVirConfigDomainDeviceClass parent_class; + + gpointer padding[20]; +}; + + +GType gvir_config_domain_interface_get_type(void); + +G_END_DECLS + +#endif /* __LIBVIRT_GCONFIG_DOMAIN_INTERFACE_H__ */ diff --git a/libvirt-gconfig/libvirt-gconfig.h b/libvirt-gconfig/libvirt-gconfig.h index 5d1d8dd..151d09a 100644 --- a/libvirt-gconfig/libvirt-gconfig.h +++ b/libvirt-gconfig/libvirt-gconfig.h @@ -32,6 +32,7 @@ #include <libvirt-gconfig/libvirt-gconfig-domain-clock.h> #include <libvirt-gconfig/libvirt-gconfig-domain-device.h> #include <libvirt-gconfig/libvirt-gconfig-domain-disk.h> +#include <libvirt-gconfig/libvirt-gconfig-domain-interface.h> #include <libvirt-gconfig/libvirt-gconfig-domain-os.h> #include <libvirt-gconfig/libvirt-gconfig-domain-snapshot.h> #include <libvirt-gconfig/libvirt-gconfig-domain-timer.h> diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index eb3a6a8..6244d6d 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -44,6 +44,8 @@ LIBVIRT_GOBJECT_0.0.1 { gvir_config_domain_disk_set_target_dev; gvir_config_domain_disk_set_type; + gvir_config_domain_interface_get_type; + gvir_config_domain_os_get_type; gvir_config_domain_os_boot_device_get_type; gvir_config_domain_os_sm_bios_mode_get_type; -- 1.7.7.3

On Wed, Nov 23, 2011 at 02:35:02PM +0100, Christophe Fergeau wrote:
This base class is mainly useful as a generic type when we manipulate list of interfaces regardless of their actual type.
-- v3: rename to GVirConfigDomainInterface since GVirConfigInterface has a different purpose --- libvirt-gconfig/Makefile.am | 2 + libvirt-gconfig/libvirt-gconfig-domain-interface.c | 60 ++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-interface.h | 64 ++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 2 + 5 files changed, 129 insertions(+), 0 deletions(-) create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-interface.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-interface.h
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 :|

-- v2: use g_return_if_fail to test function args for sanity v3: rename to GVirConfigDomainInterfaceNetwork --- libvirt-gconfig/Makefile.am | 2 + .../libvirt-gconfig-domain-interface-network.c | 92 ++++++++++++++++++++ .../libvirt-gconfig-domain-interface-network.h | 67 ++++++++++++++ libvirt-gconfig/libvirt-gconfig.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 4 + 5 files changed, 166 insertions(+), 0 deletions(-) create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-interface-network.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-interface-network.h diff --git a/libvirt-gconfig/Makefile.am b/libvirt-gconfig/Makefile.am index a797db0..bd7f41b 100644 --- a/libvirt-gconfig/Makefile.am +++ b/libvirt-gconfig/Makefile.am @@ -16,6 +16,7 @@ GCONFIG_HEADER_FILES = \ libvirt-gconfig-domain-device.h \ libvirt-gconfig-domain-disk.h \ libvirt-gconfig-domain-interface.h \ + libvirt-gconfig-domain-interface-network.h \ libvirt-gconfig-domain-os.h \ libvirt-gconfig-domain-snapshot.h \ libvirt-gconfig-domain-timer.h \ @@ -38,6 +39,7 @@ GCONFIG_SOURCE_FILES = \ libvirt-gconfig-domain-device.c \ libvirt-gconfig-domain-disk.c \ libvirt-gconfig-domain-interface.c \ + libvirt-gconfig-domain-interface-network.c \ libvirt-gconfig-domain-os.c \ libvirt-gconfig-domain-snapshot.c \ libvirt-gconfig-domain-timer.c \ diff --git a/libvirt-gconfig/libvirt-gconfig-domain-interface-network.c b/libvirt-gconfig/libvirt-gconfig-domain-interface-network.c new file mode 100644 index 0000000..fa2fb36 --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-interface-network.c @@ -0,0 +1,92 @@ +/* + * libvirt-gobject-config-interface-network.c: libvirt glib integration + * + * Copyright (C) 2008 Daniel P. Berrange + * Copyright (C) 2011 Red Hat + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Daniel P. Berrange <berrange@redhat.com> + * Author: Christophe Fergeau <cfergeau@redhat.com> + */ + +#include <config.h> + +#include <string.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; + +#define DEBUG(fmt, ...) do { if (G_UNLIKELY(debugFlag)) g_debug(fmt, ## __VA_ARGS__); } while (0) + +#define GVIR_CONFIG_DOMAIN_INTERFACE_NETWORK_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE((obj), GVIR_TYPE_CONFIG_DOMAIN_INTERFACE_NETWORK, GVirConfigDomainInterfaceNetworkPrivate)) + +struct _GVirConfigDomainInterfaceNetworkPrivate +{ + gboolean unused; +}; + +G_DEFINE_TYPE(GVirConfigDomainInterfaceNetwork, gvir_config_domain_interface_network, GVIR_TYPE_CONFIG_DOMAIN_INTERFACE); + + +static void gvir_config_domain_interface_network_class_init(GVirConfigDomainInterfaceNetworkClass *klass) +{ + g_type_class_add_private(klass, sizeof(GVirConfigDomainInterfaceNetworkPrivate)); +} + + +static void gvir_config_domain_interface_network_init(GVirConfigDomainInterfaceNetwork *conn) +{ + GVirConfigDomainInterfaceNetworkPrivate *priv; + + DEBUG("Init GVirConfigDomainInterfaceNetwork=%p", conn); + + priv = conn->priv = GVIR_CONFIG_DOMAIN_INTERFACE_NETWORK_GET_PRIVATE(conn); + + memset(priv, 0, sizeof(*priv)); +} + + +GVirConfigDomainInterfaceNetwork *gvir_config_domain_interface_network_new(void) +{ + xmlDocPtr doc; + xmlNodePtr node; + + doc = xmlNewDoc((xmlChar *)"1.0"); + node= xmlNewDocNode(doc, NULL, (xmlChar *)"interface", NULL); + xmlNewProp(doc->children, (xmlChar*)"type", (xmlChar*)"network"); + xmlDocSetRootElement(doc, node); + return GVIR_CONFIG_DOMAIN_INTERFACE_NETWORK(g_object_new(GVIR_TYPE_CONFIG_DOMAIN_INTERFACE_NETWORK, + "node", node, + NULL)); +} + +GVirConfigDomainInterfaceNetwork *gvir_config_domain_interface_network_new_from_xml(const gchar *xml, + GError **error) +{ + xmlNodePtr node; + + node = gvir_config_xml_parse(xml, "interface", error); + if ((error != NULL) && (*error != NULL)) + return NULL; + xmlNewProp(node, (xmlChar*)"type", (xmlChar*)"network"); + return GVIR_CONFIG_DOMAIN_INTERFACE_NETWORK(g_object_new(GVIR_TYPE_CONFIG_DOMAIN_INTERFACE_NETWORK, + "node", node, + NULL)); +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain-interface-network.h b/libvirt-gconfig/libvirt-gconfig-domain-interface-network.h new file mode 100644 index 0000000..f6a355e --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-interface-network.h @@ -0,0 +1,67 @@ +/* + * libvirt-gobject-config-interface-network.c: libvirt gobject integration + * + * Copyright (C) 2011 Red Hat + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Daniel P. Berrange <berrange@redhat.com> + * Author: Christophe Fergeau <cfergeau@redhat.com> + */ + +#if !defined(__LIBVIRT_GCONFIG_H__) && !defined(LIBVIRT_GCONFIG_BUILD) +#error "Only <libvirt-gconfig/libvirt-gconfig.h> can be included directly." +#endif + +#ifndef __LIBVIRT_GCONFIG_DOMAIN_INTERFACE_NETWORK_H__ +#define __LIBVIRT_GCONFIG_DOMAIN_INTERFACE_NETWORK_H__ + +G_BEGIN_DECLS + +#define GVIR_TYPE_CONFIG_DOMAIN_INTERFACE_NETWORK (gvir_config_domain_interface_network_get_type ()) +#define GVIR_CONFIG_DOMAIN_INTERFACE_NETWORK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GVIR_TYPE_CONFIG_DOMAIN_INTERFACE, GVirConfigDomainInterfaceNetwork)) +#define GVIR_CONFIG_DOMAIN_INTERFACE_NETWORK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GVIR_TYPE_CONFIG_DOMAIN_INTERFACE, GVirConfigDomainInterfaceNetworkClass)) +#define GVIR_IS_CONFIG_DOMAIN_INTERFACE_NETWORK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GVIR_TYPE_CONFIG_DOMAIN_INTERFACE)) +#define GVIR_IS_CONFIG_DOMAIN_INTERFACE_NETWORK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GVIR_TYPE_CONFIG_DOMAIN_INTERFACE)) +#define GVIR_CONFIG_DOMAIN_INTERFACE_NETWORK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GVIR_TYPE_CONFIG_DOMAIN_INTERFACE, GVirConfigDomainInterfaceNetworkClass)) + +typedef struct _GVirConfigDomainInterfaceNetwork GVirConfigDomainInterfaceNetwork; +typedef struct _GVirConfigDomainInterfaceNetworkPrivate GVirConfigDomainInterfaceNetworkPrivate; +typedef struct _GVirConfigDomainInterfaceNetworkClass GVirConfigDomainInterfaceNetworkClass; + +struct _GVirConfigDomainInterfaceNetwork +{ + GVirConfigDomainInterface parent; + + GVirConfigDomainInterfaceNetworkPrivate *priv; + + /* Do not add fields to this struct */ +}; + +struct _GVirConfigDomainInterfaceNetworkClass +{ + GVirConfigDomainInterfaceClass parent_class; + + gpointer padding[20]; +}; + +GType gvir_config_domain_interface_network_get_type(void); + +GVirConfigDomainInterfaceNetwork *gvir_config_domain_interface_network_new(void); +GVirConfigDomainInterfaceNetwork *gvir_config_domain_interface_network_new_from_xml(const gchar *xml, + GError **error); +G_END_DECLS + +#endif /* __LIBVIRT_GCONFIG_DOMAIN_INTERFACE_NETWORK_H__ */ diff --git a/libvirt-gconfig/libvirt-gconfig.h b/libvirt-gconfig/libvirt-gconfig.h index 151d09a..9940c4e 100644 --- a/libvirt-gconfig/libvirt-gconfig.h +++ b/libvirt-gconfig/libvirt-gconfig.h @@ -33,6 +33,7 @@ #include <libvirt-gconfig/libvirt-gconfig-domain-device.h> #include <libvirt-gconfig/libvirt-gconfig-domain-disk.h> #include <libvirt-gconfig/libvirt-gconfig-domain-interface.h> +#include <libvirt-gconfig/libvirt-gconfig-domain-interface-network.h> #include <libvirt-gconfig/libvirt-gconfig-domain-os.h> #include <libvirt-gconfig/libvirt-gconfig-domain-snapshot.h> #include <libvirt-gconfig/libvirt-gconfig-domain-timer.h> diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index 6244d6d..04b0bb9 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -46,6 +46,10 @@ LIBVIRT_GOBJECT_0.0.1 { gvir_config_domain_interface_get_type; + gvir_config_domain_interface_network_get_type; + gvir_config_domain_interface_network_new; + gvir_config_domain_interface_network_new_from_xml; + gvir_config_domain_os_get_type; gvir_config_domain_os_boot_device_get_type; gvir_config_domain_os_sm_bios_mode_get_type; -- 1.7.7.3

On Wed, Nov 23, 2011 at 02:35:03PM +0100, Christophe Fergeau wrote:
-- v2: use g_return_if_fail to test function args for sanity v3: rename to GVirConfigDomainInterfaceNetwork --- libvirt-gconfig/Makefile.am | 2 + .../libvirt-gconfig-domain-interface-network.c | 92 ++++++++++++++++++++ .../libvirt-gconfig-domain-interface-network.h | 67 ++++++++++++++ libvirt-gconfig/libvirt-gconfig.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 4 + 5 files changed, 166 insertions(+), 0 deletions(-) create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-interface-network.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-interface-network.h
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 :|

--- .../libvirt-gconfig-domain-interface-network.c | 13 +++++++++++++ .../libvirt-gconfig-domain-interface-network.h | 3 +++ libvirt-gconfig/libvirt-gconfig.sym | 1 + 3 files changed, 17 insertions(+), 0 deletions(-) diff --git a/libvirt-gconfig/libvirt-gconfig-domain-interface-network.c b/libvirt-gconfig/libvirt-gconfig-domain-interface-network.c index fa2fb36..31e18c4 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-interface-network.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-interface-network.c @@ -90,3 +90,16 @@ GVirConfigDomainInterfaceNetwork *gvir_config_domain_interface_network_new_from_ "node", node, NULL)); } + +void gvir_config_domain_interface_network_set_source(GVirConfigDomainInterfaceNetwork *interface, + const char *source) +{ + xmlNodePtr 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(source_node != NULL); + xmlNewProp(source_node, (xmlChar*)"network", (xmlChar*)source); +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain-interface-network.h b/libvirt-gconfig/libvirt-gconfig-domain-interface-network.h index f6a355e..3891bf9 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-interface-network.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-interface-network.h @@ -62,6 +62,9 @@ GType gvir_config_domain_interface_network_get_type(void); GVirConfigDomainInterfaceNetwork *gvir_config_domain_interface_network_new(void); GVirConfigDomainInterfaceNetwork *gvir_config_domain_interface_network_new_from_xml(const gchar *xml, GError **error); +void gvir_config_domain_interface_network_set_source(GVirConfigDomainInterfaceNetwork *interface, + const char *source); + G_END_DECLS #endif /* __LIBVIRT_GCONFIG_DOMAIN_INTERFACE_NETWORK_H__ */ diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index 04b0bb9..38a82a3 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -49,6 +49,7 @@ LIBVIRT_GOBJECT_0.0.1 { gvir_config_domain_interface_network_get_type; gvir_config_domain_interface_network_new; gvir_config_domain_interface_network_new_from_xml; + gvir_config_domain_interface_network_set_source; gvir_config_domain_os_get_type; gvir_config_domain_os_boot_device_get_type; -- 1.7.7.3

On Wed, Nov 23, 2011 at 02:35:04PM +0100, Christophe Fergeau wrote:
--- .../libvirt-gconfig-domain-interface-network.c | 13 +++++++++++++ .../libvirt-gconfig-domain-interface-network.h | 3 +++ libvirt-gconfig/libvirt-gconfig.sym | 1 + 3 files changed, 17 insertions(+), 0 deletions(-)
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 :|

--- libvirt-gconfig/tests/test-domain-create.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-) diff --git a/libvirt-gconfig/tests/test-domain-create.c b/libvirt-gconfig/tests/test-domain-create.c index 38a7fb9..8484b78 100644 --- a/libvirt-gconfig/tests/test-domain-create.c +++ b/libvirt-gconfig/tests/test-domain-create.c @@ -96,6 +96,14 @@ int main(void) gvir_config_domain_disk_set_target_dev(disk, "hda"); devices = g_list_append(devices, disk); + + /* network interface node */ + GVirConfigDomainInterfaceNetwork *interface; + + interface = gvir_config_domain_interface_network_new(); + gvir_config_domain_interface_network_set_source(interface, "default"); + devices = g_list_append(devices, interface); + gvir_config_domain_set_devices(domain, devices); g_list_free(devices); devices = NULL; -- 1.7.7.3

On Wed, Nov 23, 2011 at 02:35:05PM +0100, Christophe Fergeau wrote:
--- libvirt-gconfig/tests/test-domain-create.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-)
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 :|

-- v2: use enum for input bus type use g_return_if_fail to test function args for sanity v3: rename to GVirConfigDomainInput --- libvirt-gconfig/Makefile.am | 2 + libvirt-gconfig/libvirt-gconfig-domain-input.c | 113 ++++++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-input.h | 82 +++++++++++++++++ libvirt-gconfig/libvirt-gconfig.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 7 ++ libvirt-gconfig/tests/test-domain-create.c | 14 +++- 6 files changed, 217 insertions(+), 2 deletions(-) create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-input.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-input.h diff --git a/libvirt-gconfig/Makefile.am b/libvirt-gconfig/Makefile.am index bd7f41b..52721ad 100644 --- a/libvirt-gconfig/Makefile.am +++ b/libvirt-gconfig/Makefile.am @@ -15,6 +15,7 @@ GCONFIG_HEADER_FILES = \ libvirt-gconfig-domain-clock.h \ libvirt-gconfig-domain-device.h \ libvirt-gconfig-domain-disk.h \ + libvirt-gconfig-domain-input.h \ libvirt-gconfig-domain-interface.h \ libvirt-gconfig-domain-interface-network.h \ libvirt-gconfig-domain-os.h \ @@ -38,6 +39,7 @@ GCONFIG_SOURCE_FILES = \ libvirt-gconfig-domain-clock.c \ libvirt-gconfig-domain-device.c \ libvirt-gconfig-domain-disk.c \ + libvirt-gconfig-domain-input.c \ libvirt-gconfig-domain-interface.c \ libvirt-gconfig-domain-interface-network.c \ libvirt-gconfig-domain-os.c \ diff --git a/libvirt-gconfig/libvirt-gconfig-domain-input.c b/libvirt-gconfig/libvirt-gconfig-domain-input.c new file mode 100644 index 0000000..8d4a09f --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-input.c @@ -0,0 +1,113 @@ +/* + * libvirt-gobject-config-device_input.c: libvirt glib integration + * + * Copyright (C) 2011 Red Hat + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Christophe Fergeau <cfergeau@gmail.com> + */ + +#include <config.h> + +#include <string.h> + +#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; + +#define DEBUG(fmt, ...) do { if (G_UNLIKELY(debugFlag)) g_debug(fmt, ## __VA_ARGS__); } while (0) + +#define GVIR_CONFIG_DOMAIN_INPUT_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE((obj), GVIR_TYPE_CONFIG_DOMAIN_INPUT, GVirConfigDomainInputPrivate)) + +struct _GVirConfigDomainInputPrivate +{ + gboolean unused; +}; + +G_DEFINE_TYPE(GVirConfigDomainInput, gvir_config_domain_input, GVIR_TYPE_CONFIG_DOMAIN_DEVICE); + + +static void gvir_config_domain_input_class_init(GVirConfigDomainInputClass *klass) +{ + g_type_class_add_private(klass, sizeof(GVirConfigDomainInputPrivate)); +} + + +static void gvir_config_domain_input_init(GVirConfigDomainInput *device_input) +{ + GVirConfigDomainInputPrivate *priv; + + DEBUG("Init GVirConfigDomainInput=%p", device_input); + + priv = device_input->priv = GVIR_CONFIG_DOMAIN_INPUT_GET_PRIVATE(device_input); + + memset(priv, 0, sizeof(*priv)); +} + + +GVirConfigDomainInput *gvir_config_domain_input_new(void) +{ + GVirConfigObject *object; + + object = gvir_config_object_new(GVIR_TYPE_CONFIG_DOMAIN_INPUT, + "input", NULL); + return GVIR_CONFIG_DOMAIN_INPUT(object); +} + +GVirConfigDomainInput *gvir_config_domain_input_new_from_xml(const gchar *xml, + GError **error) +{ + GVirConfigObject *object; + + object = gvir_config_object_new_from_xml(GVIR_TYPE_CONFIG_DOMAIN_INPUT, + "input", NULL, xml, error); + return GVIR_CONFIG_DOMAIN_INPUT(object); +} + +void gvir_config_domain_input_set_device_type(GVirConfigDomainInput *input, + GVirConfigDomainInputDeviceType type) +{ + xmlNodePtr node; + const char *type_str; + + g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_INPUT(input)); + node = gvir_config_object_get_xml_node(GVIR_CONFIG_OBJECT(input)); + g_return_if_fail(node != NULL); + type_str = gvir_config_genum_get_nick(GVIR_TYPE_CONFIG_DOMAIN_INPUT_DEVICE_TYPE, + type); + g_return_if_fail(type_str != NULL); + xmlNewProp(node, (xmlChar*)"type", (xmlChar*)type_str); +} + +void gvir_config_domain_input_set_bus(GVirConfigDomainInput *input, + GVirConfigDomainInputBus bus) +{ + xmlNodePtr node; + const char *bus_str; + + g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_INPUT(input)); + node = gvir_config_object_get_xml_node(GVIR_CONFIG_OBJECT(input)); + g_return_if_fail(node != NULL); + bus_str = gvir_config_genum_get_nick(GVIR_TYPE_CONFIG_DOMAIN_INPUT_BUS, + bus); + g_return_if_fail(bus_str != NULL); + xmlNewProp(node, (xmlChar*)"bus", (xmlChar*)bus_str); +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain-input.h b/libvirt-gconfig/libvirt-gconfig-domain-input.h new file mode 100644 index 0000000..e3f22b1 --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-input.h @@ -0,0 +1,82 @@ +/* + * libvirt-gobject-domain-input.c: libvirt gobject integration + * + * Copyright (C) 2011 Red Hat + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Christophe Fergeau <cfergeau@gmail.com> + */ + +#if !defined(__LIBVIRT_GCONFIG_H__) && !defined(LIBVIRT_GCONFIG_BUILD) +#error "Only <libvirt-gconfig/libvirt-gconfig.h> can be included directly." +#endif + +#ifndef __LIBVIRT_GCONFIG_DOMAIN_INPUT_H__ +#define __LIBVIRT_GCONFIG_DOMAIN_INPUT_H__ + +G_BEGIN_DECLS + +#define GVIR_TYPE_CONFIG_DOMAIN_INPUT (gvir_config_domain_input_get_type ()) +#define GVIR_CONFIG_DOMAIN_INPUT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GVIR_TYPE_CONFIG_DOMAIN_INPUT, GVirConfigDomainInput)) +#define GVIR_CONFIG_DOMAIN_INPUT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GVIR_TYPE_CONFIG_DOMAIN_INPUT, GVirConfigDomainInputClass)) +#define GVIR_IS_CONFIG_DOMAIN_INPUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GVIR_TYPE_CONFIG_DOMAIN_INPUT)) +#define GVIR_IS_CONFIG_DOMAIN_INPUT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GVIR_TYPE_CONFIG_DOMAIN_INPUT)) +#define GVIR_CONFIG_DOMAIN_INPUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GVIR_TYPE_CONFIG_DOMAIN_INPUT, GVirConfigDomainInputClass)) + +typedef struct _GVirConfigDomainInput GVirConfigDomainInput; +typedef struct _GVirConfigDomainInputPrivate GVirConfigDomainInputPrivate; +typedef struct _GVirConfigDomainInputClass GVirConfigDomainInputClass; + +struct _GVirConfigDomainInput +{ + GVirConfigDomainDevice parent; + + GVirConfigDomainInputPrivate *priv; + + /* Do not add fields to this struct */ +}; + +struct _GVirConfigDomainInputClass +{ + GVirConfigDomainDeviceClass parent_class; + + gpointer padding[20]; +}; + +typedef enum { + GVIR_CONFIG_DOMAIN_INPUT_DEVICE_MOUSE, + GVIR_CONFIG_DOMAIN_INPUT_DEVICE_TABLET +} GVirConfigDomainInputDeviceType; + +typedef enum { + GVIR_CONFIG_DOMAIN_INPUT_BUS_PS2, + GVIR_CONFIG_DOMAIN_INPUT_BUS_USB, + GVIR_CONFIG_DOMAIN_INPUT_BUS_XEN +} GVirConfigDomainInputBus; + +GType gvir_config_domain_input_get_type(void); + +GVirConfigDomainInput *gvir_config_domain_input_new(void); +GVirConfigDomainInput *gvir_config_domain_input_new_from_xml(const gchar *xml, + GError **error); +void gvir_config_domain_input_set_device_type(GVirConfigDomainInput *input, + GVirConfigDomainInputDeviceType type); +void gvir_config_domain_input_set_bus(GVirConfigDomainInput *input, + GVirConfigDomainInputBus bus); + +G_END_DECLS + +#endif /* __LIBVIRT_GCONFIG_DOMAIN_INPUT_H__ */ diff --git a/libvirt-gconfig/libvirt-gconfig.h b/libvirt-gconfig/libvirt-gconfig.h index 9940c4e..f6bd45d 100644 --- a/libvirt-gconfig/libvirt-gconfig.h +++ b/libvirt-gconfig/libvirt-gconfig.h @@ -32,6 +32,7 @@ #include <libvirt-gconfig/libvirt-gconfig-domain-clock.h> #include <libvirt-gconfig/libvirt-gconfig-domain-device.h> #include <libvirt-gconfig/libvirt-gconfig-domain-disk.h> +#include <libvirt-gconfig/libvirt-gconfig-domain-input.h> #include <libvirt-gconfig/libvirt-gconfig-domain-interface.h> #include <libvirt-gconfig/libvirt-gconfig-domain-interface-network.h> #include <libvirt-gconfig/libvirt-gconfig-domain-os.h> diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index 38a82a3..b0a5ae1 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -44,6 +44,13 @@ LIBVIRT_GOBJECT_0.0.1 { gvir_config_domain_disk_set_target_dev; gvir_config_domain_disk_set_type; + gvir_config_domain_input_get_type; + gvir_config_domain_input_device_type_get_type; + gvir_config_domain_input_new; + gvir_config_domain_input_new_from_xml; + gvir_config_domain_input_set_device_type; + gvir_config_domain_input_set_bus; + gvir_config_domain_interface_get_type; gvir_config_domain_interface_network_get_type; diff --git a/libvirt-gconfig/tests/test-domain-create.c b/libvirt-gconfig/tests/test-domain-create.c index 8484b78..b0ed210 100644 --- a/libvirt-gconfig/tests/test-domain-create.c +++ b/libvirt-gconfig/tests/test-domain-create.c @@ -94,15 +94,25 @@ int main(void) gvir_config_domain_disk_set_driver_type(disk, "qcow2"); gvir_config_domain_disk_set_target_bus(disk, "ide"); gvir_config_domain_disk_set_target_dev(disk, "hda"); + devices = g_list_append(devices, GVIR_CONFIG_DOMAIN_DEVICE(disk)); - devices = g_list_append(devices, disk); /* network interface node */ GVirConfigDomainInterfaceNetwork *interface; interface = gvir_config_domain_interface_network_new(); gvir_config_domain_interface_network_set_source(interface, "default"); - devices = g_list_append(devices, interface); + devices = g_list_append(devices, GVIR_CONFIG_DOMAIN_DEVICE(interface)); + + /* input node */ + GVirConfigDomainInput *input; + + input = gvir_config_domain_input_new(); + gvir_config_domain_input_set_device_type(input, + GVIR_CONFIG_DOMAIN_INPUT_DEVICE_TABLET); + gvir_config_domain_input_set_bus(input, GVIR_CONFIG_DOMAIN_INPUT_BUS_USB); + devices = g_list_append(devices, GVIR_CONFIG_DOMAIN_DEVICE(input)); + gvir_config_domain_set_devices(domain, devices); g_list_free(devices); -- 1.7.7.3

On Wed, Nov 23, 2011 at 02:35:06PM +0100, Christophe Fergeau wrote:
-- v2: use enum for input bus type use g_return_if_fail to test function args for sanity v3: rename to GVirConfigDomainInput --- libvirt-gconfig/Makefile.am | 2 + libvirt-gconfig/libvirt-gconfig-domain-input.c | 113 ++++++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-input.h | 82 +++++++++++++++++ libvirt-gconfig/libvirt-gconfig.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 7 ++ libvirt-gconfig/tests/test-domain-create.c | 14 +++- 6 files changed, 217 insertions(+), 2 deletions(-) create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-input.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-input.h
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 :|

This is an abstract type which will be used as a base class for the various type of <graphics> devices (spice, vnc, ...) -- v3: rename to GVirConfigDomainGraphics --- libvirt-gconfig/Makefile.am | 2 + libvirt-gconfig/libvirt-gconfig-domain-graphics.c | 61 ++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-graphics.h | 64 +++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 2 + 5 files changed, 130 insertions(+), 0 deletions(-) create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-graphics.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-graphics.h diff --git a/libvirt-gconfig/Makefile.am b/libvirt-gconfig/Makefile.am index 52721ad..2ed140f 100644 --- a/libvirt-gconfig/Makefile.am +++ b/libvirt-gconfig/Makefile.am @@ -15,6 +15,7 @@ GCONFIG_HEADER_FILES = \ libvirt-gconfig-domain-clock.h \ libvirt-gconfig-domain-device.h \ libvirt-gconfig-domain-disk.h \ + libvirt-gconfig-domain-graphics.h \ libvirt-gconfig-domain-input.h \ libvirt-gconfig-domain-interface.h \ libvirt-gconfig-domain-interface-network.h \ @@ -39,6 +40,7 @@ GCONFIG_SOURCE_FILES = \ libvirt-gconfig-domain-clock.c \ libvirt-gconfig-domain-device.c \ libvirt-gconfig-domain-disk.c \ + libvirt-gconfig-domain-graphics.c \ libvirt-gconfig-domain-input.c \ libvirt-gconfig-domain-interface.c \ libvirt-gconfig-domain-interface-network.c \ diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics.c new file mode 100644 index 0000000..6e48b72 --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics.c @@ -0,0 +1,61 @@ +/* + * libvirt-gobject-config-domain-graphics.c: libvirt glib integration + * + * Copyright (C) 2011 Red Hat + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Christophe Fergeau <cfergeau@gmail.com> + */ + +#include <config.h> + +#include <string.h> + +#include <libxml/tree.h> + +#include "libvirt-gconfig/libvirt-gconfig.h" + +extern gboolean debugFlag; + +#define DEBUG(fmt, ...) do { if (G_UNLIKELY(debugFlag)) g_debug(fmt, ## __VA_ARGS__); } while (0) + +#define GVIR_CONFIG_DOMAIN_GRAPHICS_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE((obj), GVIR_TYPE_CONFIG_DOMAIN_GRAPHICS, GVirConfigDomainGraphicsPrivate)) + +struct _GVirConfigDomainGraphicsPrivate +{ + gboolean unused; +}; + +G_DEFINE_ABSTRACT_TYPE(GVirConfigDomainGraphics, gvir_config_domain_graphics, GVIR_TYPE_CONFIG_DOMAIN_DEVICE); + + +static void gvir_config_domain_graphics_class_init(GVirConfigDomainGraphicsClass *klass) +{ + g_type_class_add_private(klass, sizeof(GVirConfigDomainGraphicsPrivate)); +} + + +static void gvir_config_domain_graphics_init(GVirConfigDomainGraphics *graphics) +{ + GVirConfigDomainGraphicsPrivate *priv; + + DEBUG("Init GVirConfigDomainGraphics=%p", graphics); + + priv = graphics->priv = GVIR_CONFIG_DOMAIN_GRAPHICS_GET_PRIVATE(graphics); + + memset(priv, 0, sizeof(*priv)); +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics.h b/libvirt-gconfig/libvirt-gconfig-domain-graphics.h new file mode 100644 index 0000000..572d4d9 --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics.h @@ -0,0 +1,64 @@ +/* + * libvirt-gobject-domain-graphics.c: libvirt gobject integration + * + * Copyright (C) 2011 Red Hat + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Christophe Fergeau <cfergeau@gmail.com> + */ + +#if !defined(__LIBVIRT_GCONFIG_H__) && !defined(LIBVIRT_GCONFIG_BUILD) +#error "Only <libvirt-gconfig/libvirt-gconfig.h> can be included directly." +#endif + +#ifndef __LIBVIRT_GCONFIG_DOMAIN_GRAPHICS_H__ +#define __LIBVIRT_GCONFIG_DOMAIN_GRAPHICS_H__ + +G_BEGIN_DECLS + +#define GVIR_TYPE_CONFIG_DOMAIN_GRAPHICS (gvir_config_domain_graphics_get_type ()) +#define GVIR_CONFIG_DOMAIN_GRAPHICS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GVIR_TYPE_CONFIG_DOMAIN_GRAPHICS, GVirConfigDomainGraphics)) +#define GVIR_CONFIG_DOMAIN_GRAPHICS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GVIR_TYPE_CONFIG_DOMAIN_GRAPHICS, GVirConfigDomainGraphicsClass)) +#define GVIR_IS_CONFIG_DOMAIN_GRAPHICS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GVIR_TYPE_CONFIG_DOMAIN_GRAPHICS)) +#define GVIR_IS_CONFIG_DOMAIN_GRAPHICS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GVIR_TYPE_CONFIG_DOMAIN_GRAPHICS)) +#define GVIR_CONFIG_DOMAIN_GRAPHICS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GVIR_TYPE_CONFIG_DOMAIN_GRAPHICS, GVirConfigDomainGraphicsClass)) + +typedef struct _GVirConfigDomainGraphics GVirConfigDomainGraphics; +typedef struct _GVirConfigDomainGraphicsPrivate GVirConfigDomainGraphicsPrivate; +typedef struct _GVirConfigDomainGraphicsClass GVirConfigDomainGraphicsClass; + +struct _GVirConfigDomainGraphics +{ + GVirConfigDomainDevice parent; + + GVirConfigDomainGraphicsPrivate *priv; + + /* Do not add fields to this struct */ +}; + +struct _GVirConfigDomainGraphicsClass +{ + GVirConfigDomainDeviceClass parent_class; + + gpointer padding[20]; +}; + + +GType gvir_config_domain_graphics_get_type(void); + +G_END_DECLS + +#endif /* __LIBVIRT_GCONFIG_DOMAIN_GRAPHICS_H__ */ diff --git a/libvirt-gconfig/libvirt-gconfig.h b/libvirt-gconfig/libvirt-gconfig.h index f6bd45d..b3fb0f1 100644 --- a/libvirt-gconfig/libvirt-gconfig.h +++ b/libvirt-gconfig/libvirt-gconfig.h @@ -32,6 +32,7 @@ #include <libvirt-gconfig/libvirt-gconfig-domain-clock.h> #include <libvirt-gconfig/libvirt-gconfig-domain-device.h> #include <libvirt-gconfig/libvirt-gconfig-domain-disk.h> +#include <libvirt-gconfig/libvirt-gconfig-domain-graphics.h> #include <libvirt-gconfig/libvirt-gconfig-domain-input.h> #include <libvirt-gconfig/libvirt-gconfig-domain-interface.h> #include <libvirt-gconfig/libvirt-gconfig-domain-interface-network.h> diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index b0a5ae1..e3ba263 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -44,6 +44,8 @@ LIBVIRT_GOBJECT_0.0.1 { gvir_config_domain_disk_set_target_dev; gvir_config_domain_disk_set_type; + gvir_config_domain_graphics_get_type; + gvir_config_domain_input_get_type; gvir_config_domain_input_device_type_get_type; gvir_config_domain_input_new; -- 1.7.7.3

On Wed, Nov 23, 2011 at 02:35:07PM +0100, Christophe Fergeau wrote:
This is an abstract type which will be used as a base class for the various type of <graphics> devices (spice, vnc, ...)
-- v3: rename to GVirConfigDomainGraphics --- libvirt-gconfig/Makefile.am | 2 + libvirt-gconfig/libvirt-gconfig-domain-graphics.c | 61 ++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-graphics.h | 64 +++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 2 + 5 files changed, 130 insertions(+), 0 deletions(-) create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-graphics.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-graphics.h
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 :|

Only the (non-TLS) port can be set on it -- v2: rename to GVirConfigDeviceGraphicsSpice fix node creation (missing "type" attribute) derive GVirConfigDeviceGraphicsSpice from GVirConfigDeviceGraphics use g_return_if_fail to test function args for sanity v3: rename to GVirConfigDomainGraphicsSpice --- libvirt-gconfig/Makefile.am | 2 + .../libvirt-gconfig-domain-graphics-spice.c | 106 ++++++++++++++++++++ .../libvirt-gconfig-domain-graphics-spice.h | 69 +++++++++++++ libvirt-gconfig/libvirt-gconfig.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 5 + libvirt-gconfig/tests/test-domain-create.c | 7 ++ 6 files changed, 190 insertions(+), 0 deletions(-) create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h diff --git a/libvirt-gconfig/Makefile.am b/libvirt-gconfig/Makefile.am index 2ed140f..a596ad9 100644 --- a/libvirt-gconfig/Makefile.am +++ b/libvirt-gconfig/Makefile.am @@ -16,6 +16,7 @@ GCONFIG_HEADER_FILES = \ libvirt-gconfig-domain-device.h \ libvirt-gconfig-domain-disk.h \ libvirt-gconfig-domain-graphics.h \ + libvirt-gconfig-domain-graphics-spice.h \ libvirt-gconfig-domain-input.h \ libvirt-gconfig-domain-interface.h \ libvirt-gconfig-domain-interface-network.h \ @@ -41,6 +42,7 @@ GCONFIG_SOURCE_FILES = \ libvirt-gconfig-domain-device.c \ libvirt-gconfig-domain-disk.c \ libvirt-gconfig-domain-graphics.c \ + libvirt-gconfig-domain-graphics-spice.c \ libvirt-gconfig-domain-input.c \ libvirt-gconfig-domain-interface.c \ libvirt-gconfig-domain-interface-network.c \ diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c new file mode 100644 index 0000000..e49a818 --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c @@ -0,0 +1,106 @@ +/* + * libvirt-gobject-config-domain-graphics-spice.c: libvirt glib integration + * + * Copyright (C) 2011 Red Hat + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Christophe Fergeau <cfergeau@gmail.com> + */ + +#include <config.h> + +#include <string.h> + +#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; + +#define DEBUG(fmt, ...) do { if (G_UNLIKELY(debugFlag)) g_debug(fmt, ## __VA_ARGS__); } while (0) + +#define GVIR_CONFIG_DOMAIN_GRAPHICS_SPICE_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE((obj), GVIR_TYPE_CONFIG_DOMAIN_GRAPHICS_SPICE, GVirConfigDomainGraphicsSpicePrivate)) + +struct _GVirConfigDomainGraphicsSpicePrivate +{ + gboolean unused; +}; + +G_DEFINE_TYPE(GVirConfigDomainGraphicsSpice, gvir_config_domain_graphics_spice, GVIR_TYPE_CONFIG_DOMAIN_GRAPHICS); + + +static void gvir_config_domain_graphics_spice_class_init(GVirConfigDomainGraphicsSpiceClass *klass) +{ + g_type_class_add_private(klass, sizeof(GVirConfigDomainGraphicsSpicePrivate)); +} + + +static void gvir_config_domain_graphics_spice_init(GVirConfigDomainGraphicsSpice *graphics_spice) +{ + GVirConfigDomainGraphicsSpicePrivate *priv; + + DEBUG("Init GVirConfigDomainGraphicsSpice=%p", graphics_spice); + + priv = graphics_spice->priv = GVIR_CONFIG_DOMAIN_GRAPHICS_SPICE_GET_PRIVATE(graphics_spice); + + memset(priv, 0, sizeof(*priv)); +} + + +GVirConfigDomainGraphicsSpice *gvir_config_domain_graphics_spice_new(void) +{ + xmlDocPtr doc; + xmlNodePtr node; + + doc = xmlNewDoc((xmlChar *)"1.0"); + node= xmlNewDocNode(doc, NULL, (xmlChar *)"graphics", NULL); + xmlNewProp(doc->children, (xmlChar*)"type", (xmlChar*)"spice"); + xmlDocSetRootElement(doc, node); + return GVIR_CONFIG_DOMAIN_GRAPHICS_SPICE(g_object_new(GVIR_TYPE_CONFIG_DOMAIN_GRAPHICS_SPICE, + "node", node, + NULL)); +} + +GVirConfigDomainGraphicsSpice *gvir_config_domain_graphics_spice_new_from_xml(const gchar *xml, + GError **error) +{ + xmlNodePtr node; + + node = gvir_config_xml_parse(xml, "graphics", error); + if ((error != NULL) && (*error != NULL)) + return NULL; + xmlNewProp(node, (xmlChar*)"type", (xmlChar*)"spice"); + return GVIR_CONFIG_DOMAIN_GRAPHICS_SPICE(g_object_new(GVIR_TYPE_CONFIG_DOMAIN_GRAPHICS_SPICE, + "node", node, + NULL)); +} + +void gvir_config_domain_graphics_spice_set_port(GVirConfigDomainGraphicsSpice *graphics, + unsigned int port) +{ + xmlNodePtr node; + char *port_str; + + g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_GRAPHICS_SPICE(graphics)); + node = gvir_config_object_get_xml_node(GVIR_CONFIG_OBJECT(graphics)); + g_return_if_fail(node != NULL); + port_str = g_strdup_printf("%u", port); + xmlNewProp(node, (xmlChar*)"port", (xmlChar*)port_str); + g_free(port_str); +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h new file mode 100644 index 0000000..11d32a1 --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h @@ -0,0 +1,69 @@ +/* + * libvirt-gconfig-domain-graphics-spice.h: libvirt gobject integration + * + * Copyright (C) 2011 Red Hat + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Christophe Fergeau <cfergeau@gmail.com> + */ + +#if !defined(__LIBVIRT_GCONFIG_H__) && !defined(LIBVIRT_GCONFIG_BUILD) +#error "Only <libvirt-gconfig/libvirt-gconfig.h> can be included directly." +#endif + +#ifndef __LIBVIRT_GCONFIG_DOMAIN_GRAPHICS_SPICE_H__ +#define __LIBVIRT_GCONFIG_DOMAIN_GRAPHICS_SPICE_H__ + +G_BEGIN_DECLS + +#define GVIR_TYPE_CONFIG_DOMAIN_GRAPHICS_SPICE (gvir_config_domain_graphics_spice_get_type ()) +#define GVIR_CONFIG_DOMAIN_GRAPHICS_SPICE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GVIR_TYPE_CONFIG_DOMAIN_GRAPHICS_SPICE, GVirConfigDomainGraphicsSpice)) +#define GVIR_CONFIG_DOMAIN_GRAPHICS_SPICE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GVIR_TYPE_CONFIG_DOMAIN_GRAPHICS_SPICE, GVirConfigDomainGraphicsSpiceClass)) +#define GVIR_IS_CONFIG_DOMAIN_GRAPHICS_SPICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GVIR_TYPE_CONFIG_DOMAIN_GRAPHICS_SPICE)) +#define GVIR_IS_CONFIG_DOMAIN_GRAPHICS_SPICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GVIR_TYPE_CONFIG_DOMAIN_GRAPHICS_SPICE)) +#define GVIR_CONFIG_DOMAIN_GRAPHICS_SPICE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GVIR_TYPE_CONFIG_DOMAIN_GRAPHICS_SPICE, GVirConfigDomainGraphicsSpiceClass)) + +typedef struct _GVirConfigDomainGraphicsSpice GVirConfigDomainGraphicsSpice; +typedef struct _GVirConfigDomainGraphicsSpicePrivate GVirConfigDomainGraphicsSpicePrivate; +typedef struct _GVirConfigDomainGraphicsSpiceClass GVirConfigDomainGraphicsSpiceClass; + +struct _GVirConfigDomainGraphicsSpice +{ + GVirConfigDomainGraphics parent; + + GVirConfigDomainGraphicsSpicePrivate *priv; + + /* Do not add fields to this struct */ +}; + +struct _GVirConfigDomainGraphicsSpiceClass +{ + GVirConfigDomainGraphicsClass parent_class; + + gpointer padding[20]; +}; + +GType gvir_config_domain_graphics_spice_get_type(void); + +GVirConfigDomainGraphicsSpice *gvir_config_domain_graphics_spice_new(void); +GVirConfigDomainGraphicsSpice *gvir_config_domain_graphics_spice_new_from_xml(const gchar *xml, + GError **error); +void gvir_config_domain_graphics_spice_set_port(GVirConfigDomainGraphicsSpice *graphics, + unsigned int port); + +G_END_DECLS + +#endif /* __LIBVIRT_GCONFIG_DOMAIN_GRAPHICS_SPICE_H__ */ diff --git a/libvirt-gconfig/libvirt-gconfig.h b/libvirt-gconfig/libvirt-gconfig.h index b3fb0f1..3619c1d 100644 --- a/libvirt-gconfig/libvirt-gconfig.h +++ b/libvirt-gconfig/libvirt-gconfig.h @@ -33,6 +33,7 @@ #include <libvirt-gconfig/libvirt-gconfig-domain-device.h> #include <libvirt-gconfig/libvirt-gconfig-domain-disk.h> #include <libvirt-gconfig/libvirt-gconfig-domain-graphics.h> +#include <libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h> #include <libvirt-gconfig/libvirt-gconfig-domain-input.h> #include <libvirt-gconfig/libvirt-gconfig-domain-interface.h> #include <libvirt-gconfig/libvirt-gconfig-domain-interface-network.h> diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index e3ba263..ba036ab 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -46,6 +46,11 @@ LIBVIRT_GOBJECT_0.0.1 { gvir_config_domain_graphics_get_type; + gvir_config_domain_graphics_spice_get_type; + gvir_config_domain_graphics_spice_new; + gvir_config_domain_graphics_spice_new_from_xml; + gvir_config_domain_graphics_spice_set_port; + gvir_config_domain_input_get_type; gvir_config_domain_input_device_type_get_type; gvir_config_domain_input_new; diff --git a/libvirt-gconfig/tests/test-domain-create.c b/libvirt-gconfig/tests/test-domain-create.c index b0ed210..34cc2dc 100644 --- a/libvirt-gconfig/tests/test-domain-create.c +++ b/libvirt-gconfig/tests/test-domain-create.c @@ -113,6 +113,13 @@ int main(void) gvir_config_domain_input_set_bus(input, GVIR_CONFIG_DOMAIN_INPUT_BUS_USB); devices = g_list_append(devices, GVIR_CONFIG_DOMAIN_DEVICE(input)); + /* graphics node */ + GVirConfigDomainGraphicsSpice *graphics; + + graphics = gvir_config_domain_graphics_spice_new(); + gvir_config_domain_graphics_spice_set_port(graphics, 1234); + devices = g_list_append(devices, GVIR_CONFIG_DOMAIN_DEVICE(graphics)); + gvir_config_domain_set_devices(domain, devices); g_list_free(devices); -- 1.7.7.3

On Wed, Nov 23, 2011 at 02:35:08PM +0100, Christophe Fergeau wrote:
Only the (non-TLS) port can be set on it
-- v2: rename to GVirConfigDeviceGraphicsSpice fix node creation (missing "type" attribute) derive GVirConfigDeviceGraphicsSpice from GVirConfigDeviceGraphics use g_return_if_fail to test function args for sanity v3: rename to GVirConfigDomainGraphicsSpice --- libvirt-gconfig/Makefile.am | 2 + .../libvirt-gconfig-domain-graphics-spice.c | 106 ++++++++++++++++++++ .../libvirt-gconfig-domain-graphics-spice.h | 69 +++++++++++++ libvirt-gconfig/libvirt-gconfig.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 5 + libvirt-gconfig/tests/test-domain-create.c | 7 ++ 6 files changed, 190 insertions(+), 0 deletions(-) create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.h
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 :|

-- v2: use g_return_if_fail to test function args for sanity v3: rename to GVirConfigDomainVideo --- libvirt-gconfig/Makefile.am | 2 + libvirt-gconfig/libvirt-gconfig-domain-video.c | 133 ++++++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-video.h | 82 +++++++++++++++ libvirt-gconfig/libvirt-gconfig.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 8 ++ libvirt-gconfig/tests/test-domain-create.c | 8 ++ 6 files changed, 234 insertions(+), 0 deletions(-) create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-video.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-video.h diff --git a/libvirt-gconfig/Makefile.am b/libvirt-gconfig/Makefile.am index a596ad9..e91c601 100644 --- a/libvirt-gconfig/Makefile.am +++ b/libvirt-gconfig/Makefile.am @@ -23,6 +23,7 @@ GCONFIG_HEADER_FILES = \ libvirt-gconfig-domain-os.h \ libvirt-gconfig-domain-snapshot.h \ libvirt-gconfig-domain-timer.h \ + libvirt-gconfig-domain-video.h \ libvirt-gconfig-helpers.h \ libvirt-gconfig-interface.h \ libvirt-gconfig-network.h \ @@ -49,6 +50,7 @@ GCONFIG_SOURCE_FILES = \ libvirt-gconfig-domain-os.c \ libvirt-gconfig-domain-snapshot.c \ libvirt-gconfig-domain-timer.c \ + libvirt-gconfig-domain-video.c \ libvirt-gconfig-enum-types.c \ libvirt-gconfig-helpers.c \ libvirt-gconfig-interface.c \ diff --git a/libvirt-gconfig/libvirt-gconfig-domain-video.c b/libvirt-gconfig/libvirt-gconfig-domain-video.c new file mode 100644 index 0000000..80ecf6b --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-video.c @@ -0,0 +1,133 @@ +/* + * libvirt-gobject-config-domain-video.c: libvirt glib integration + * + * Copyright (C) 2011 Red Hat + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Christophe Fergeau <cfergeau@gmail.com> + */ + +#include <config.h> + +#include <string.h> + +#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; + +#define DEBUG(fmt, ...) do { if (G_UNLIKELY(debugFlag)) g_debug(fmt, ## __VA_ARGS__); } while (0) + +#define GVIR_CONFIG_DOMAIN_VIDEO_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE((obj), GVIR_TYPE_CONFIG_DOMAIN_VIDEO, GVirConfigDomainVideoPrivate)) + +struct _GVirConfigDomainVideoPrivate +{ + gboolean unused; +}; + +G_DEFINE_TYPE(GVirConfigDomainVideo, gvir_config_domain_video, GVIR_TYPE_CONFIG_DOMAIN_DEVICE); + + +static void gvir_config_domain_video_class_init(GVirConfigDomainVideoClass *klass) +{ + g_type_class_add_private(klass, sizeof(GVirConfigDomainVideoPrivate)); +} + + +static void gvir_config_domain_video_init(GVirConfigDomainVideo *video) +{ + GVirConfigDomainVideoPrivate *priv; + + DEBUG("Init GVirConfigDomainVideo=%p", video); + + priv = video->priv = GVIR_CONFIG_DOMAIN_VIDEO_GET_PRIVATE(video); + + memset(priv, 0, sizeof(*priv)); +} + + +GVirConfigDomainVideo *gvir_config_domain_video_new(void) +{ + GVirConfigObject *object; + + object = gvir_config_object_new(GVIR_TYPE_CONFIG_DOMAIN_VIDEO, + "video", NULL); + return GVIR_CONFIG_DOMAIN_VIDEO(object); +} + +GVirConfigDomainVideo *gvir_config_domain_video_new_from_xml(const gchar *xml, + GError **error) +{ + GVirConfigObject *object; + + object = gvir_config_object_new_from_xml(GVIR_TYPE_CONFIG_DOMAIN_VIDEO, + "video", NULL, xml, error); + return GVIR_CONFIG_DOMAIN_VIDEO(object); +} + +void gvir_config_domain_video_set_model(GVirConfigDomainVideo *video, + GVirConfigDomainVideoModel model) +{ + xmlNodePtr node; + const char *model_str; + + g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_VIDEO(video)); + node = gvir_config_object_replace_child(GVIR_CONFIG_OBJECT(video), + "model"); + g_return_if_fail(node != NULL); + model_str = gvir_config_genum_get_nick(GVIR_TYPE_CONFIG_DOMAIN_VIDEO_MODEL, + model); + g_return_if_fail(model_str != NULL); + xmlNewProp(node, (xmlChar*)"type", (xmlChar*)model_str); +} + +void gvir_config_domain_video_set_vram(GVirConfigDomainVideo *video, + guint kbytes) +{ + xmlNodePtr node; + char *vram_str; + + node = gvir_config_object_get_xml_node(GVIR_CONFIG_OBJECT(video)); + if (node == NULL) + return; + node = gvir_config_xml_get_element(node, "model", NULL); + if (node == NULL) + return; + vram_str = g_strdup_printf("%u", kbytes); + xmlNewProp(node, (xmlChar*)"vram", (xmlChar*)vram_str); + g_free(vram_str); +} + +void gvir_config_domain_video_set_heads(GVirConfigDomainVideo *video, + guint head_count) +{ + xmlNodePtr node; + char *heads_str; + + node = gvir_config_object_get_xml_node(GVIR_CONFIG_OBJECT(video)); + if (node == NULL) + return; + node = gvir_config_xml_get_element(node, "model", NULL); + if (node == NULL) + return; + heads_str = g_strdup_printf("%u", head_count); + xmlNewProp(node, (xmlChar*)"heads", (xmlChar*)heads_str); + g_free(heads_str); +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain-video.h b/libvirt-gconfig/libvirt-gconfig-domain-video.h new file mode 100644 index 0000000..4790e56 --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-video.h @@ -0,0 +1,82 @@ +/* + * libvirt-gobject-domain-video.c: libvirt gobject integration + * + * Copyright (C) 2011 Red Hat + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Christophe Fergeau <cfergeau@gmail.com> + */ + +#if !defined(__LIBVIRT_GCONFIG_H__) && !defined(LIBVIRT_GCONFIG_BUILD) +#error "Only <libvirt-gconfig/libvirt-gconfig.h> can be included directly." +#endif + +#ifndef __LIBVIRT_GCONFIG_DOMAIN_VIDEO_H__ +#define __LIBVIRT_GCONFIG_DOMAIN_VIDEO_H__ + +G_BEGIN_DECLS + +#define GVIR_TYPE_CONFIG_DOMAIN_VIDEO (gvir_config_domain_video_get_type ()) +#define GVIR_CONFIG_DOMAIN_VIDEO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GVIR_TYPE_CONFIG_DOMAIN_VIDEO, GVirConfigDomainVideo)) +#define GVIR_CONFIG_DOMAIN_VIDEO_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GVIR_TYPE_CONFIG_DOMAIN_VIDEO, GVirConfigDomainVideoClass)) +#define GVIR_IS_CONFIG_DOMAIN_VIDEO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GVIR_TYPE_CONFIG_DOMAIN_VIDEO)) +#define GVIR_IS_CONFIG_DOMAIN_VIDEO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GVIR_TYPE_CONFIG_DOMAIN_VIDEO)) +#define GVIR_CONFIG_DOMAIN_VIDEO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GVIR_TYPE_CONFIG_DOMAIN_VIDEO, GVirConfigDomainVideoClass)) + +typedef struct _GVirConfigDomainVideo GVirConfigDomainVideo; +typedef struct _GVirConfigDomainVideoPrivate GVirConfigDomainVideoPrivate; +typedef struct _GVirConfigDomainVideoClass GVirConfigDomainVideoClass; + +struct _GVirConfigDomainVideo +{ + GVirConfigDomainDevice parent; + + GVirConfigDomainVideoPrivate *priv; + + /* Do not add fields to this struct */ +}; + +struct _GVirConfigDomainVideoClass +{ + GVirConfigDomainDeviceClass parent_class; + + gpointer padding[20]; +}; + +typedef enum { + GVIR_CONFIG_DOMAIN_VIDEO_MODEL_VGA, + GVIR_CONFIG_DOMAIN_VIDEO_MODEL_CIRRUS, + GVIR_CONFIG_DOMAIN_VIDEO_MODEL_VMVGA, + GVIR_CONFIG_DOMAIN_VIDEO_MODEL_XEN, + GVIR_CONFIG_DOMAIN_VIDEO_MODEL_VBOX, + GVIR_CONFIG_DOMAIN_VIDEO_MODEL_QXL +} GVirConfigDomainVideoModel; + +GType gvir_config_domain_video_get_type(void); + +GVirConfigDomainVideo *gvir_config_domain_video_new(void); +GVirConfigDomainVideo *gvir_config_domain_video_new_from_xml(const gchar *xml, + GError **error); +void gvir_config_domain_video_set_model(GVirConfigDomainVideo *video, + GVirConfigDomainVideoModel model); +void gvir_config_domain_video_set_vram(GVirConfigDomainVideo *video, + guint kbytes); +void gvir_config_domain_video_set_heads(GVirConfigDomainVideo *video, + guint head_count); + +G_END_DECLS + +#endif /* __LIBVIRT_GCONFIG_DOMAIN_VIDEO_H__ */ diff --git a/libvirt-gconfig/libvirt-gconfig.h b/libvirt-gconfig/libvirt-gconfig.h index 3619c1d..064bae6 100644 --- a/libvirt-gconfig/libvirt-gconfig.h +++ b/libvirt-gconfig/libvirt-gconfig.h @@ -40,6 +40,7 @@ #include <libvirt-gconfig/libvirt-gconfig-domain-os.h> #include <libvirt-gconfig/libvirt-gconfig-domain-snapshot.h> #include <libvirt-gconfig/libvirt-gconfig-domain-timer.h> +#include <libvirt-gconfig/libvirt-gconfig-domain-video.h> #include <libvirt-gconfig/libvirt-gconfig-enum-types.h> #include <libvirt-gconfig/libvirt-gconfig-helpers.h> #include <libvirt-gconfig/libvirt-gconfig-interface.h> diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index ba036ab..ae97a92 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -87,6 +87,14 @@ LIBVIRT_GOBJECT_0.0.1 { gvir_config_domain_timer_new; gvir_config_domain_timer_new_from_xml; + gvir_config_domain_video_get_type; + gvir_config_domain_video_model_get_type; + gvir_config_domain_video_new; + gvir_config_domain_video_new_from_xml; + gvir_config_domain_video_set_model; + gvir_config_domain_video_set_vram; + gvir_config_domain_video_set_heads; + gvir_config_interface_get_type; gvir_config_interface_new; gvir_config_interface_new_from_xml; diff --git a/libvirt-gconfig/tests/test-domain-create.c b/libvirt-gconfig/tests/test-domain-create.c index 34cc2dc..bade013 100644 --- a/libvirt-gconfig/tests/test-domain-create.c +++ b/libvirt-gconfig/tests/test-domain-create.c @@ -120,6 +120,14 @@ int main(void) gvir_config_domain_graphics_spice_set_port(graphics, 1234); devices = g_list_append(devices, GVIR_CONFIG_DOMAIN_DEVICE(graphics)); + /* video node */ + GVirConfigDomainVideo *video; + + video = gvir_config_domain_video_new(); + gvir_config_domain_video_set_model(video, + GVIR_CONFIG_DOMAIN_VIDEO_MODEL_QXL); + devices = g_list_append(devices, GVIR_CONFIG_DOMAIN_DEVICE(video)); + gvir_config_domain_set_devices(domain, devices); g_list_free(devices); -- 1.7.7.3

On Wed, Nov 23, 2011 at 02:35:09PM +0100, Christophe Fergeau wrote:
-- v2: use g_return_if_fail to test function args for sanity v3: rename to GVirConfigDomainVideo --- libvirt-gconfig/Makefile.am | 2 + libvirt-gconfig/libvirt-gconfig-domain-video.c | 133 ++++++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-video.h | 82 +++++++++++++++ libvirt-gconfig/libvirt-gconfig.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 8 ++ libvirt-gconfig/tests/test-domain-create.c | 8 ++ 6 files changed, 234 insertions(+), 0 deletions(-) create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-video.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-video.h
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 :|

The GObject private data allocated with g_type_class_add_private will be automatically zero'ed when the GObject is created so we don't need to memset it to 0. --- libvirt-gconfig/libvirt-gconfig-capabilities.c | 6 +----- libvirt-gconfig/libvirt-gconfig-domain-clock.c | 6 +----- libvirt-gconfig/libvirt-gconfig-domain-device.c | 6 +----- libvirt-gconfig/libvirt-gconfig-domain-disk.c | 6 +----- .../libvirt-gconfig-domain-graphics-spice.c | 6 +----- libvirt-gconfig/libvirt-gconfig-domain-graphics.c | 6 +----- libvirt-gconfig/libvirt-gconfig-domain-input.c | 6 +----- .../libvirt-gconfig-domain-interface-network.c | 6 +----- libvirt-gconfig/libvirt-gconfig-domain-interface.c | 6 +----- libvirt-gconfig/libvirt-gconfig-domain-os.c | 6 +----- libvirt-gconfig/libvirt-gconfig-domain-snapshot.c | 6 +----- libvirt-gconfig/libvirt-gconfig-domain-timer.c | 6 +----- libvirt-gconfig/libvirt-gconfig-domain-video.c | 6 +----- libvirt-gconfig/libvirt-gconfig-domain.c | 6 +----- libvirt-gconfig/libvirt-gconfig-interface.c | 6 +----- libvirt-gconfig/libvirt-gconfig-network-filter.c | 6 +----- libvirt-gconfig/libvirt-gconfig-network.c | 6 +----- libvirt-gconfig/libvirt-gconfig-node-device.c | 6 +----- libvirt-gconfig/libvirt-gconfig-object.c | 6 +----- libvirt-gconfig/libvirt-gconfig-secret.c | 6 +----- libvirt-gconfig/libvirt-gconfig-storage-pool.c | 6 +----- libvirt-gconfig/libvirt-gconfig-storage-vol.c | 6 +----- libvirt-gobject/libvirt-gobject-domain-snapshot.c | 6 +----- libvirt-gobject/libvirt-gobject-domain.c | 6 +----- libvirt-gobject/libvirt-gobject-interface.c | 6 +----- libvirt-gobject/libvirt-gobject-manager.c | 2 -- libvirt-gobject/libvirt-gobject-network-filter.c | 6 +----- libvirt-gobject/libvirt-gobject-network.c | 6 +----- libvirt-gobject/libvirt-gobject-node-device.c | 6 +----- libvirt-gobject/libvirt-gobject-secret.c | 6 +----- libvirt-gobject/libvirt-gobject-storage-pool.c | 2 -- libvirt-gobject/libvirt-gobject-storage-vol.c | 6 +----- 32 files changed, 30 insertions(+), 154 deletions(-) diff --git a/libvirt-gconfig/libvirt-gconfig-capabilities.c b/libvirt-gconfig/libvirt-gconfig-capabilities.c index 55b196b..70bd33d 100644 --- a/libvirt-gconfig/libvirt-gconfig-capabilities.c +++ b/libvirt-gconfig/libvirt-gconfig-capabilities.c @@ -50,13 +50,9 @@ static void gvir_config_capabilities_class_init(GVirConfigCapabilitiesClass *kla static void gvir_config_capabilities_init(GVirConfigCapabilities *conn) { - GVirConfigCapabilitiesPrivate *priv; - DEBUG("Init GVirConfigCapabilities=%p", conn); - priv = conn->priv = GVIR_CONFIG_CAPABILITIES_GET_PRIVATE(conn); - - memset(priv, 0, sizeof(*priv)); + conn->priv = GVIR_CONFIG_CAPABILITIES_GET_PRIVATE(conn); } diff --git a/libvirt-gconfig/libvirt-gconfig-domain-clock.c b/libvirt-gconfig/libvirt-gconfig-domain-clock.c index b414c4f..27d1e67 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-clock.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-clock.c @@ -53,13 +53,9 @@ static void gvir_config_domain_clock_class_init(GVirConfigDomainClockClass *klas static void gvir_config_domain_clock_init(GVirConfigDomainClock *klock) { - GVirConfigDomainClockPrivate *priv; - DEBUG("Init GVirConfigDomainClock=%p", klock); - priv = klock->priv = GVIR_CONFIG_DOMAIN_CLOCK_GET_PRIVATE(klock); - - memset(priv, 0, sizeof(*priv)); + klock->priv = GVIR_CONFIG_DOMAIN_CLOCK_GET_PRIVATE(klock); } diff --git a/libvirt-gconfig/libvirt-gconfig-domain-device.c b/libvirt-gconfig/libvirt-gconfig-domain-device.c index 63cf289..6dd0df1 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-device.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-device.c @@ -51,11 +51,7 @@ static void gvir_config_domain_device_class_init(GVirConfigDomainDeviceClass *kl static void gvir_config_domain_device_init(GVirConfigDomainDevice *device) { - GVirConfigDomainDevicePrivate *priv; - DEBUG("Init GVirConfigDomainDevice=%p", device); - priv = device->priv = GVIR_CONFIG_DOMAIN_DEVICE_GET_PRIVATE(device); - - memset(priv, 0, sizeof(*priv)); + device->priv = GVIR_CONFIG_DOMAIN_DEVICE_GET_PRIVATE(device); } diff --git a/libvirt-gconfig/libvirt-gconfig-domain-disk.c b/libvirt-gconfig/libvirt-gconfig-domain-disk.c index 25810c5..8a9d6e6 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-disk.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-disk.c @@ -53,13 +53,9 @@ static void gvir_config_domain_disk_class_init(GVirConfigDomainDiskClass *klass) static void gvir_config_domain_disk_init(GVirConfigDomainDisk *disk) { - GVirConfigDomainDiskPrivate *priv; - DEBUG("Init GVirConfigDomainDisk=%p", disk); - priv = disk->priv = GVIR_CONFIG_DOMAIN_DISK_GET_PRIVATE(disk); - - memset(priv, 0, sizeof(*priv)); + disk->priv = GVIR_CONFIG_DOMAIN_DISK_GET_PRIVATE(disk); } diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c index e49a818..e5c2ff8 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics-spice.c @@ -53,13 +53,9 @@ static void gvir_config_domain_graphics_spice_class_init(GVirConfigDomainGraphic static void gvir_config_domain_graphics_spice_init(GVirConfigDomainGraphicsSpice *graphics_spice) { - GVirConfigDomainGraphicsSpicePrivate *priv; - DEBUG("Init GVirConfigDomainGraphicsSpice=%p", graphics_spice); - priv = graphics_spice->priv = GVIR_CONFIG_DOMAIN_GRAPHICS_SPICE_GET_PRIVATE(graphics_spice); - - memset(priv, 0, sizeof(*priv)); + graphics_spice->priv = GVIR_CONFIG_DOMAIN_GRAPHICS_SPICE_GET_PRIVATE(graphics_spice); } diff --git a/libvirt-gconfig/libvirt-gconfig-domain-graphics.c b/libvirt-gconfig/libvirt-gconfig-domain-graphics.c index 6e48b72..1c2a2ad 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-graphics.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-graphics.c @@ -51,11 +51,7 @@ static void gvir_config_domain_graphics_class_init(GVirConfigDomainGraphicsClass static void gvir_config_domain_graphics_init(GVirConfigDomainGraphics *graphics) { - GVirConfigDomainGraphicsPrivate *priv; - DEBUG("Init GVirConfigDomainGraphics=%p", graphics); - priv = graphics->priv = GVIR_CONFIG_DOMAIN_GRAPHICS_GET_PRIVATE(graphics); - - memset(priv, 0, sizeof(*priv)); + graphics->priv = GVIR_CONFIG_DOMAIN_GRAPHICS_GET_PRIVATE(graphics); } diff --git a/libvirt-gconfig/libvirt-gconfig-domain-input.c b/libvirt-gconfig/libvirt-gconfig-domain-input.c index 8d4a09f..ad11472 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-input.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-input.c @@ -53,13 +53,9 @@ static void gvir_config_domain_input_class_init(GVirConfigDomainInputClass *klas static void gvir_config_domain_input_init(GVirConfigDomainInput *device_input) { - GVirConfigDomainInputPrivate *priv; - DEBUG("Init GVirConfigDomainInput=%p", device_input); - priv = device_input->priv = GVIR_CONFIG_DOMAIN_INPUT_GET_PRIVATE(device_input); - - memset(priv, 0, sizeof(*priv)); + device_input->priv = GVIR_CONFIG_DOMAIN_INPUT_GET_PRIVATE(device_input); } diff --git a/libvirt-gconfig/libvirt-gconfig-domain-interface-network.c b/libvirt-gconfig/libvirt-gconfig-domain-interface-network.c index 31e18c4..e559df4 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-interface-network.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-interface-network.c @@ -53,13 +53,9 @@ static void gvir_config_domain_interface_network_class_init(GVirConfigDomainInte static void gvir_config_domain_interface_network_init(GVirConfigDomainInterfaceNetwork *conn) { - GVirConfigDomainInterfaceNetworkPrivate *priv; - DEBUG("Init GVirConfigDomainInterfaceNetwork=%p", conn); - priv = conn->priv = GVIR_CONFIG_DOMAIN_INTERFACE_NETWORK_GET_PRIVATE(conn); - - memset(priv, 0, sizeof(*priv)); + conn->priv = GVIR_CONFIG_DOMAIN_INTERFACE_NETWORK_GET_PRIVATE(conn); } diff --git a/libvirt-gconfig/libvirt-gconfig-domain-interface.c b/libvirt-gconfig/libvirt-gconfig-domain-interface.c index ecabfae..3af98ee 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-interface.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-interface.c @@ -50,11 +50,7 @@ static void gvir_config_domain_interface_class_init(GVirConfigDomainInterfaceCla static void gvir_config_domain_interface_init(GVirConfigDomainInterface *interface) { - GVirConfigDomainInterfacePrivate *priv; - DEBUG("Init GVirConfigDomainInterface=%p", interface); - priv = interface->priv = GVIR_CONFIG_DOMAIN_INTERFACE_GET_PRIVATE(interface); - - memset(priv, 0, sizeof(*priv)); + interface->priv = GVIR_CONFIG_DOMAIN_INTERFACE_GET_PRIVATE(interface); } diff --git a/libvirt-gconfig/libvirt-gconfig-domain-os.c b/libvirt-gconfig/libvirt-gconfig-domain-os.c index 412ed41..f1802ae 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-os.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-os.c @@ -53,13 +53,9 @@ static void gvir_config_domain_os_class_init(GVirConfigDomainOsClass *klass) static void gvir_config_domain_os_init(GVirConfigDomainOs *os) { - GVirConfigDomainOsPrivate *priv; - DEBUG("Init GVirConfigDomainOs=%p", os); - priv = os->priv = GVIR_CONFIG_DOMAIN_OS_GET_PRIVATE(os); - - memset(priv, 0, sizeof(*priv)); + os->priv = GVIR_CONFIG_DOMAIN_OS_GET_PRIVATE(os); } diff --git a/libvirt-gconfig/libvirt-gconfig-domain-snapshot.c b/libvirt-gconfig/libvirt-gconfig-domain-snapshot.c index aa74254..5835e69 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-snapshot.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-snapshot.c @@ -50,13 +50,9 @@ static void gvir_config_domain_snapshot_class_init(GVirConfigDomainSnapshotClass static void gvir_config_domain_snapshot_init(GVirConfigDomainSnapshot *conn) { - GVirConfigDomainSnapshotPrivate *priv; - DEBUG("Init GVirConfigDomainSnapshot=%p", conn); - priv = conn->priv = GVIR_CONFIG_DOMAIN_SNAPSHOT_GET_PRIVATE(conn); - - memset(priv, 0, sizeof(*priv)); + conn->priv = GVIR_CONFIG_DOMAIN_SNAPSHOT_GET_PRIVATE(conn); } diff --git a/libvirt-gconfig/libvirt-gconfig-domain-timer.c b/libvirt-gconfig/libvirt-gconfig-domain-timer.c index 179d8b2..e03a2a2 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-timer.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-timer.c @@ -51,13 +51,9 @@ static void gvir_config_domain_timer_class_init(GVirConfigDomainTimerClass *klas static void gvir_config_domain_timer_init(GVirConfigDomainTimer *timer) { - GVirConfigDomainTimerPrivate *priv; - DEBUG("Init GVirConfigDomainTimer=%p", timer); - priv = timer->priv = GVIR_CONFIG_DOMAIN_TIMER_GET_PRIVATE(timer); - - memset(priv, 0, sizeof(*priv)); + timer->priv = GVIR_CONFIG_DOMAIN_TIMER_GET_PRIVATE(timer); } diff --git a/libvirt-gconfig/libvirt-gconfig-domain-video.c b/libvirt-gconfig/libvirt-gconfig-domain-video.c index 80ecf6b..8c6c9fb 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-video.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-video.c @@ -53,13 +53,9 @@ static void gvir_config_domain_video_class_init(GVirConfigDomainVideoClass *klas static void gvir_config_domain_video_init(GVirConfigDomainVideo *video) { - GVirConfigDomainVideoPrivate *priv; - DEBUG("Init GVirConfigDomainVideo=%p", video); - priv = video->priv = GVIR_CONFIG_DOMAIN_VIDEO_GET_PRIVATE(video); - - memset(priv, 0, sizeof(*priv)); + video->priv = GVIR_CONFIG_DOMAIN_VIDEO_GET_PRIVATE(video); } diff --git a/libvirt-gconfig/libvirt-gconfig-domain.c b/libvirt-gconfig/libvirt-gconfig-domain.c index 6cee46f..2c21219 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain.c +++ b/libvirt-gconfig/libvirt-gconfig-domain.c @@ -151,13 +151,9 @@ static void gvir_config_domain_class_init(GVirConfigDomainClass *klass) static void gvir_config_domain_init(GVirConfigDomain *conn) { - GVirConfigDomainPrivate *priv; - DEBUG("Init GVirConfigDomain=%p", conn); - priv = conn->priv = GVIR_CONFIG_DOMAIN_GET_PRIVATE(conn); - - memset(priv, 0, sizeof(*priv)); + conn->priv = GVIR_CONFIG_DOMAIN_GET_PRIVATE(conn); } diff --git a/libvirt-gconfig/libvirt-gconfig-interface.c b/libvirt-gconfig/libvirt-gconfig-interface.c index b58a4b4..cffd840 100644 --- a/libvirt-gconfig/libvirt-gconfig-interface.c +++ b/libvirt-gconfig/libvirt-gconfig-interface.c @@ -50,13 +50,9 @@ static void gvir_config_interface_class_init(GVirConfigInterfaceClass *klass) static void gvir_config_interface_init(GVirConfigInterface *conn) { - GVirConfigInterfacePrivate *priv; - DEBUG("Init GVirConfigInterface=%p", conn); - priv = conn->priv = GVIR_CONFIG_INTERFACE_GET_PRIVATE(conn); - - memset(priv, 0, sizeof(*priv)); + conn->priv = GVIR_CONFIG_INTERFACE_GET_PRIVATE(conn); } diff --git a/libvirt-gconfig/libvirt-gconfig-network-filter.c b/libvirt-gconfig/libvirt-gconfig-network-filter.c index bea21a3..dcf9e56 100644 --- a/libvirt-gconfig/libvirt-gconfig-network-filter.c +++ b/libvirt-gconfig/libvirt-gconfig-network-filter.c @@ -50,13 +50,9 @@ static void gvir_config_network_filter_class_init(GVirConfigNetworkFilterClass * static void gvir_config_network_filter_init(GVirConfigNetworkFilter *conn) { - GVirConfigNetworkFilterPrivate *priv; - DEBUG("Init GVirConfigNetworkFilter=%p", conn); - priv = conn->priv = GVIR_CONFIG_NETWORK_FILTER_GET_PRIVATE(conn); - - memset(priv, 0, sizeof(*priv)); + conn->priv = GVIR_CONFIG_NETWORK_FILTER_GET_PRIVATE(conn); } diff --git a/libvirt-gconfig/libvirt-gconfig-network.c b/libvirt-gconfig/libvirt-gconfig-network.c index 26d5d61..73092de 100644 --- a/libvirt-gconfig/libvirt-gconfig-network.c +++ b/libvirt-gconfig/libvirt-gconfig-network.c @@ -50,13 +50,9 @@ static void gvir_config_network_class_init(GVirConfigNetworkClass *klass) static void gvir_config_network_init(GVirConfigNetwork *conn) { - GVirConfigNetworkPrivate *priv; - DEBUG("Init GVirConfigNetwork=%p", conn); - priv = conn->priv = GVIR_CONFIG_NETWORK_GET_PRIVATE(conn); - - memset(priv, 0, sizeof(*priv)); + conn->priv = GVIR_CONFIG_NETWORK_GET_PRIVATE(conn); } diff --git a/libvirt-gconfig/libvirt-gconfig-node-device.c b/libvirt-gconfig/libvirt-gconfig-node-device.c index 71389ef..fa679b1 100644 --- a/libvirt-gconfig/libvirt-gconfig-node-device.c +++ b/libvirt-gconfig/libvirt-gconfig-node-device.c @@ -50,13 +50,9 @@ static void gvir_config_node_device_class_init(GVirConfigNodeDeviceClass *klass) static void gvir_config_node_device_init(GVirConfigNodeDevice *conn) { - GVirConfigNodeDevicePrivate *priv; - DEBUG("Init GVirConfigNodeDevice=%p", conn); - priv = conn->priv = GVIR_CONFIG_NODE_DEVICE_GET_PRIVATE(conn); - - memset(priv, 0, sizeof(*priv)); + conn->priv = GVIR_CONFIG_NODE_DEVICE_GET_PRIVATE(conn); } diff --git a/libvirt-gconfig/libvirt-gconfig-object.c b/libvirt-gconfig/libvirt-gconfig-object.c index 142d714..edbaf57 100644 --- a/libvirt-gconfig/libvirt-gconfig-object.c +++ b/libvirt-gconfig/libvirt-gconfig-object.c @@ -178,13 +178,9 @@ static void gvir_config_object_class_init(GVirConfigObjectClass *klass) static void gvir_config_object_init(GVirConfigObject *conn) { - GVirConfigObjectPrivate *priv; - DEBUG("Init GVirConfigObject=%p", conn); - priv = conn->priv = GVIR_CONFIG_OBJECT_GET_PRIVATE(conn); - - memset(priv, 0, sizeof(*priv)); + conn->priv = GVIR_CONFIG_OBJECT_GET_PRIVATE(conn); } void gvir_config_object_validate(GVirConfigObject *config, diff --git a/libvirt-gconfig/libvirt-gconfig-secret.c b/libvirt-gconfig/libvirt-gconfig-secret.c index 6267cf5..0c5de85 100644 --- a/libvirt-gconfig/libvirt-gconfig-secret.c +++ b/libvirt-gconfig/libvirt-gconfig-secret.c @@ -50,13 +50,9 @@ static void gvir_config_secret_class_init(GVirConfigSecretClass *klass) static void gvir_config_secret_init(GVirConfigSecret *conn) { - GVirConfigSecretPrivate *priv; - DEBUG("Init GVirConfigSecret=%p", conn); - priv = conn->priv = GVIR_CONFIG_SECRET_GET_PRIVATE(conn); - - memset(priv, 0, sizeof(*priv)); + conn->priv = GVIR_CONFIG_SECRET_GET_PRIVATE(conn); } diff --git a/libvirt-gconfig/libvirt-gconfig-storage-pool.c b/libvirt-gconfig/libvirt-gconfig-storage-pool.c index 8a70ac2..aad60ed 100644 --- a/libvirt-gconfig/libvirt-gconfig-storage-pool.c +++ b/libvirt-gconfig/libvirt-gconfig-storage-pool.c @@ -50,13 +50,9 @@ static void gvir_config_storage_pool_class_init(GVirConfigStoragePoolClass *klas static void gvir_config_storage_pool_init(GVirConfigStoragePool *conn) { - GVirConfigStoragePoolPrivate *priv; - DEBUG("Init GVirConfigStoragePool=%p", conn); - priv = conn->priv = GVIR_CONFIG_STORAGE_POOL_GET_PRIVATE(conn); - - memset(priv, 0, sizeof(*priv)); + conn->priv = GVIR_CONFIG_STORAGE_POOL_GET_PRIVATE(conn); } diff --git a/libvirt-gconfig/libvirt-gconfig-storage-vol.c b/libvirt-gconfig/libvirt-gconfig-storage-vol.c index 4a17c45..4a59b72 100644 --- a/libvirt-gconfig/libvirt-gconfig-storage-vol.c +++ b/libvirt-gconfig/libvirt-gconfig-storage-vol.c @@ -50,13 +50,9 @@ static void gvir_config_storage_vol_class_init(GVirConfigStorageVolClass *klass) static void gvir_config_storage_vol_init(GVirConfigStorageVol *conn) { - GVirConfigStorageVolPrivate *priv; - DEBUG("Init GVirConfigStorageVol=%p", conn); - priv = conn->priv = GVIR_CONFIG_STORAGE_VOL_GET_PRIVATE(conn); - - memset(priv, 0, sizeof(*priv)); + conn->priv = GVIR_CONFIG_STORAGE_VOL_GET_PRIVATE(conn); } diff --git a/libvirt-gobject/libvirt-gobject-domain-snapshot.c b/libvirt-gobject/libvirt-gobject-domain-snapshot.c index 52d9809..afd1e96 100644 --- a/libvirt-gobject/libvirt-gobject-domain-snapshot.c +++ b/libvirt-gobject/libvirt-gobject-domain-snapshot.c @@ -140,13 +140,9 @@ static void gvir_domain_snapshot_class_init(GVirDomainSnapshotClass *klass) static void gvir_domain_snapshot_init(GVirDomainSnapshot *conn) { - GVirDomainSnapshotPrivate *priv; - DEBUG("Init GVirDomainSnapshot=%p", conn); - priv = conn->priv = GVIR_DOMAIN_SNAPSHOT_GET_PRIVATE(conn); - - memset(priv, 0, sizeof(*priv)); + conn->priv = GVIR_DOMAIN_SNAPSHOT_GET_PRIVATE(conn); } typedef struct virDomainSnapshot GVirDomainSnapshotHandle; diff --git a/libvirt-gobject/libvirt-gobject-domain.c b/libvirt-gobject/libvirt-gobject-domain.c index 36d618c..464d287 100644 --- a/libvirt-gobject/libvirt-gobject-domain.c +++ b/libvirt-gobject/libvirt-gobject-domain.c @@ -215,13 +215,9 @@ static void gvir_domain_class_init(GVirDomainClass *klass) static void gvir_domain_init(GVirDomain *conn) { - GVirDomainPrivate *priv; - DEBUG("Init GVirDomain=%p", conn); - priv = conn->priv = GVIR_DOMAIN_GET_PRIVATE(conn); - - memset(priv, 0, sizeof(*priv)); + conn->priv = GVIR_DOMAIN_GET_PRIVATE(conn); } typedef struct virDomain GVirDomainHandle; diff --git a/libvirt-gobject/libvirt-gobject-interface.c b/libvirt-gobject/libvirt-gobject-interface.c index ee474d7..3be633c 100644 --- a/libvirt-gobject/libvirt-gobject-interface.c +++ b/libvirt-gobject/libvirt-gobject-interface.c @@ -139,13 +139,9 @@ static void gvir_interface_class_init(GVirInterfaceClass *klass) static void gvir_interface_init(GVirInterface *conn) { - GVirInterfacePrivate *priv; - DEBUG("Init GVirInterface=%p", conn); - priv = conn->priv = GVIR_INTERFACE_GET_PRIVATE(conn); - - memset(priv, 0, sizeof(*priv)); + conn->priv = GVIR_INTERFACE_GET_PRIVATE(conn); } typedef struct virInterface GVirInterfaceHandle; diff --git a/libvirt-gobject/libvirt-gobject-manager.c b/libvirt-gobject/libvirt-gobject-manager.c index 5022216..5f3a11a 100644 --- a/libvirt-gobject/libvirt-gobject-manager.c +++ b/libvirt-gobject/libvirt-gobject-manager.c @@ -119,8 +119,6 @@ static void gvir_manager_init(GVirManager *conn) priv = conn->priv = GVIR_MANAGER_GET_PRIVATE(conn); - memset(priv, 0, sizeof(*priv)); - priv->lock = g_mutex_new(); } diff --git a/libvirt-gobject/libvirt-gobject-network-filter.c b/libvirt-gobject/libvirt-gobject-network-filter.c index bde9b4f..01e9636 100644 --- a/libvirt-gobject/libvirt-gobject-network-filter.c +++ b/libvirt-gobject/libvirt-gobject-network-filter.c @@ -156,13 +156,9 @@ static void gvir_network_filter_class_init(GVirNetworkFilterClass *klass) static void gvir_network_filter_init(GVirNetworkFilter *conn) { - GVirNetworkFilterPrivate *priv; - DEBUG("Init GVirNetworkFilter=%p", conn); - priv = conn->priv = GVIR_NETWORK_FILTER_GET_PRIVATE(conn); - - memset(priv, 0, sizeof(*priv)); + conn->priv = GVIR_NETWORK_FILTER_GET_PRIVATE(conn); } typedef struct virNWFilter GVirNetworkFilterHandle; diff --git a/libvirt-gobject/libvirt-gobject-network.c b/libvirt-gobject/libvirt-gobject-network.c index 6316fd4..3c49117 100644 --- a/libvirt-gobject/libvirt-gobject-network.c +++ b/libvirt-gobject/libvirt-gobject-network.c @@ -154,13 +154,9 @@ static void gvir_network_class_init(GVirNetworkClass *klass) static void gvir_network_init(GVirNetwork *conn) { - GVirNetworkPrivate *priv; - DEBUG("Init GVirNetwork=%p", conn); - priv = conn->priv = GVIR_NETWORK_GET_PRIVATE(conn); - - memset(priv, 0, sizeof(*priv)); + conn->priv = GVIR_NETWORK_GET_PRIVATE(conn); } typedef struct virNetwork GVirNetworkHandle; diff --git a/libvirt-gobject/libvirt-gobject-node-device.c b/libvirt-gobject/libvirt-gobject-node-device.c index 5ee6fda..04d7d04 100644 --- a/libvirt-gobject/libvirt-gobject-node-device.c +++ b/libvirt-gobject/libvirt-gobject-node-device.c @@ -140,13 +140,9 @@ static void gvir_node_device_class_init(GVirNodeDeviceClass *klass) static void gvir_node_device_init(GVirNodeDevice *conn) { - GVirNodeDevicePrivate *priv; - DEBUG("Init GVirNodeDevice=%p", conn); - priv = conn->priv = GVIR_NODE_DEVICE_GET_PRIVATE(conn); - - memset(priv, 0, sizeof(*priv)); + conn->priv = GVIR_NODE_DEVICE_GET_PRIVATE(conn); } typedef struct virNodeDevice GVirNodeDeviceHandle; diff --git a/libvirt-gobject/libvirt-gobject-secret.c b/libvirt-gobject/libvirt-gobject-secret.c index 2109819..f2fd9a8 100644 --- a/libvirt-gobject/libvirt-gobject-secret.c +++ b/libvirt-gobject/libvirt-gobject-secret.c @@ -156,13 +156,9 @@ static void gvir_secret_class_init(GVirSecretClass *klass) static void gvir_secret_init(GVirSecret *conn) { - GVirSecretPrivate *priv; - DEBUG("Init GVirSecret=%p", conn); - priv = conn->priv = GVIR_SECRET_GET_PRIVATE(conn); - - memset(priv, 0, sizeof(*priv)); + conn->priv = GVIR_SECRET_GET_PRIVATE(conn); } typedef struct virSecret GVirSecretHandle; diff --git a/libvirt-gobject/libvirt-gobject-storage-pool.c b/libvirt-gobject/libvirt-gobject-storage-pool.c index abf018b..cb69e7e 100644 --- a/libvirt-gobject/libvirt-gobject-storage-pool.c +++ b/libvirt-gobject/libvirt-gobject-storage-pool.c @@ -172,8 +172,6 @@ static void gvir_storage_pool_init(GVirStoragePool *pool) priv = pool->priv = GVIR_STORAGE_POOL_GET_PRIVATE(pool); - memset(priv, 0, sizeof(*priv)); - priv->lock = g_mutex_new(); } diff --git a/libvirt-gobject/libvirt-gobject-storage-vol.c b/libvirt-gobject/libvirt-gobject-storage-vol.c index 245de6f..0c8cb09 100644 --- a/libvirt-gobject/libvirt-gobject-storage-vol.c +++ b/libvirt-gobject/libvirt-gobject-storage-vol.c @@ -140,13 +140,9 @@ static void gvir_storage_vol_class_init(GVirStorageVolClass *klass) static void gvir_storage_vol_init(GVirStorageVol *conn) { - GVirStorageVolPrivate *priv; - DEBUG("Init GVirStorageVol=%p", conn); - priv = conn->priv = GVIR_STORAGE_VOL_GET_PRIVATE(conn); - - memset(priv, 0, sizeof(*priv)); + conn->priv = GVIR_STORAGE_VOL_GET_PRIVATE(conn); } typedef struct virStorageVol GVirStorageVolHandle; -- 1.7.7.3

On Wed, Nov 23, 2011 at 02:35:10PM +0100, Christophe Fergeau wrote:
The GObject private data allocated with g_type_class_add_private will be automatically zero'ed when the GObject is created so we don't need to memset it to 0. --- libvirt-gconfig/libvirt-gconfig-capabilities.c | 6 +----- libvirt-gconfig/libvirt-gconfig-domain-clock.c | 6 +----- libvirt-gconfig/libvirt-gconfig-domain-device.c | 6 +----- libvirt-gconfig/libvirt-gconfig-domain-disk.c | 6 +----- .../libvirt-gconfig-domain-graphics-spice.c | 6 +----- libvirt-gconfig/libvirt-gconfig-domain-graphics.c | 6 +----- libvirt-gconfig/libvirt-gconfig-domain-input.c | 6 +----- .../libvirt-gconfig-domain-interface-network.c | 6 +----- libvirt-gconfig/libvirt-gconfig-domain-interface.c | 6 +----- libvirt-gconfig/libvirt-gconfig-domain-os.c | 6 +----- libvirt-gconfig/libvirt-gconfig-domain-snapshot.c | 6 +----- libvirt-gconfig/libvirt-gconfig-domain-timer.c | 6 +----- libvirt-gconfig/libvirt-gconfig-domain-video.c | 6 +----- libvirt-gconfig/libvirt-gconfig-domain.c | 6 +----- libvirt-gconfig/libvirt-gconfig-interface.c | 6 +----- libvirt-gconfig/libvirt-gconfig-network-filter.c | 6 +----- libvirt-gconfig/libvirt-gconfig-network.c | 6 +----- libvirt-gconfig/libvirt-gconfig-node-device.c | 6 +----- libvirt-gconfig/libvirt-gconfig-object.c | 6 +----- libvirt-gconfig/libvirt-gconfig-secret.c | 6 +----- libvirt-gconfig/libvirt-gconfig-storage-pool.c | 6 +----- libvirt-gconfig/libvirt-gconfig-storage-vol.c | 6 +----- libvirt-gobject/libvirt-gobject-domain-snapshot.c | 6 +----- libvirt-gobject/libvirt-gobject-domain.c | 6 +----- libvirt-gobject/libvirt-gobject-interface.c | 6 +----- libvirt-gobject/libvirt-gobject-manager.c | 2 -- libvirt-gobject/libvirt-gobject-network-filter.c | 6 +----- libvirt-gobject/libvirt-gobject-network.c | 6 +----- libvirt-gobject/libvirt-gobject-node-device.c | 6 +----- libvirt-gobject/libvirt-gobject-secret.c | 6 +----- libvirt-gobject/libvirt-gobject-storage-pool.c | 2 -- libvirt-gobject/libvirt-gobject-storage-vol.c | 6 +----- 32 files changed, 30 insertions(+), 154 deletions(-)
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 :|
participants (2)
-
Christophe Fergeau
-
Daniel P. Berrange