[libvirt] [PATCH libvirt-glib 1/6] Add GVirDomainDevice abstract class

Christophe Fergeau cfergeau at redhat.com
Mon Nov 14 17:09:02 UTC 2011


ACK 1-5, please don't push 6 for now as it may cause bad conflicts with
some pending libvirt-gconfig changes. If you want to push the
libvirt-gobject bits now, let me know, I'll look at it.

Christophe


On Mon, Nov 14, 2011 at 01:50:02PM +0100, Marc-André Lureau wrote:
> ---
>  libvirt-gobject/Makefile.am                        |    3 +
>  .../libvirt-gobject-domain-device-private.h        |   31 +++++
>  libvirt-gobject/libvirt-gobject-domain-device.c    |  139 ++++++++++++++++++++
>  libvirt-gobject/libvirt-gobject-domain-device.h    |   64 +++++++++
>  libvirt-gobject/libvirt-gobject.h                  |    1 +
>  libvirt-gobject/libvirt-gobject.sym                |    2 +
>  6 files changed, 240 insertions(+), 0 deletions(-)
>  create mode 100644 libvirt-gobject/libvirt-gobject-domain-device-private.h
>  create mode 100644 libvirt-gobject/libvirt-gobject-domain-device.c
>  create mode 100644 libvirt-gobject/libvirt-gobject-domain-device.h
> 
> diff --git a/libvirt-gobject/Makefile.am b/libvirt-gobject/Makefile.am
> index 4f84b8b..56a047e 100644
> --- a/libvirt-gobject/Makefile.am
> +++ b/libvirt-gobject/Makefile.am
> @@ -7,6 +7,7 @@ GOBJECT_HEADER_FILES = \
>  			libvirt-gobject.h \
>  			libvirt-gobject-main.h \
>  			libvirt-gobject-domain-snapshot.h \
> +			libvirt-gobject-domain-device.h \
>  			libvirt-gobject-domain.h \
>  			libvirt-gobject-interface.h \
>  			libvirt-gobject-network.h \
> @@ -21,6 +22,7 @@ GOBJECT_HEADER_FILES = \
>  GOBJECT_SOURCE_FILES = \
>  			libvirt-gobject-main.c \
>  			libvirt-gobject-domain-snapshot.c \
> +			libvirt-gobject-domain-device.c \
>  			libvirt-gobject-domain.c \
>  			libvirt-gobject-interface.c \
>  			libvirt-gobject-network.c \
> @@ -42,6 +44,7 @@ libvirt_gobject_1_0_la_HEADERS = \
>  			$(GOBJECT_HEADER_FILES) \
>  			libvirt-gobject-input-stream.h
>  nodist_libvirt_gobject_1_0_la_HEADERS = \
> +			libvirt-gobject-domain-device-private.h \
>  			libvirt-gobject-enums.h
>  libvirt_gobject_1_0_la_SOURCES = \
>  			$(libvirt_gobject_1_0_la_HEADERS) \
> diff --git a/libvirt-gobject/libvirt-gobject-domain-device-private.h b/libvirt-gobject/libvirt-gobject-domain-device-private.h
> new file mode 100644
> index 0000000..2a34309
> --- /dev/null
> +++ b/libvirt-gobject/libvirt-gobject-domain-device-private.h
> @@ -0,0 +1,31 @@
> +/*
> + * libvirt-gobject-domain-device-private.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: Marc-André Lureau <marcandre.lureau at redhat.com>
> + */
> +#ifndef __LIBVIRT_GOBJECT_DOMAIN_DEVICE_PRIVATE_H__
> +#define __LIBVIRT_GOBJECT_DOMAIN_DEVICE_PRIVATEH__
> +
> +G_BEGIN_DECLS
> +
> +virDomainPtr gvir_domain_device_get_domain_handle(GVirDomainDevice *self);
> +
> +G_END_DECLS
> +
> +#endif /* __LIBVIRT_GOBJECT_DOMAIN_DEVICE_PRIVATEH__ */
> diff --git a/libvirt-gobject/libvirt-gobject-domain-device.c b/libvirt-gobject/libvirt-gobject-domain-device.c
> new file mode 100644
> index 0000000..ae03489
> --- /dev/null
> +++ b/libvirt-gobject/libvirt-gobject-domain-device.c
> @@ -0,0 +1,139 @@
> +/*
> + * 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: Marc-André Lureau <marcandre.lureau at redhat.com>
> + */
> +
> +#include <config.h>
> +
> +#include <libvirt/virterror.h>
> +#include <string.h>
> +
> +#include "libvirt-glib/libvirt-glib.h"
> +#include "libvirt-gobject/libvirt-gobject.h"
> +
> +#include "libvirt-gobject/libvirt-gobject-domain-device-private.h"
> +
> +extern gboolean debugFlag;
> +
> +#define DEBUG(fmt, ...) do { if (G_UNLIKELY(debugFlag)) g_debug(fmt, ## __VA_ARGS__); } while (0)
> +
> +#define GVIR_DOMAIN_DEVICE_GET_PRIVATE(obj)                         \
> +        (G_TYPE_INSTANCE_GET_PRIVATE((obj), GVIR_TYPE_DOMAIN_DEVICE, GVirDomainDevicePrivate))
> +
> +struct _GVirDomainDevicePrivate
> +{
> +    GVirDomain *domain;
> +};
> +
> +G_DEFINE_ABSTRACT_TYPE(GVirDomainDevice, gvir_domain_device, G_TYPE_OBJECT);
> +
> +enum {
> +    PROP_0,
> +    PROP_DOMAIN,
> +};
> +
> +static void gvir_domain_device_get_property(GObject *object,
> +                                            guint prop_id,
> +                                            GValue *value,
> +                                            GParamSpec *pspec)
> +{
> +    GVirDomainDevice *self = GVIR_DOMAIN_DEVICE(object);
> +    GVirDomainDevicePrivate *priv = self->priv;
> +
> +    switch (prop_id) {
> +    case PROP_DOMAIN:
> +        g_value_set_object(value, priv->domain);
> +        break;
> +
> +    default:
> +        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
> +    }
> +}
> +
> +
> +static void gvir_domain_device_set_property(GObject *object,
> +                                            guint prop_id,
> +                                            const GValue *value,
> +                                            GParamSpec *pspec)
> +{
> +    GVirDomainDevice *self = GVIR_DOMAIN_DEVICE(object);
> +    GVirDomainDevicePrivate *priv = self->priv;
> +
> +    switch (prop_id) {
> +    case PROP_DOMAIN:
> +        g_clear_object(&priv->domain);
> +        priv->domain = g_value_dup_object(value);
> +        break;
> +
> +    default:
> +        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
> +    }
> +}
> +
> +
> +static void gvir_domain_device_finalize(GObject *object)
> +{
> +    GVirDomainDevice *self = GVIR_DOMAIN_DEVICE(object);
> +    GVirDomainDevicePrivate *priv = self->priv;
> +
> +    DEBUG("Finalize GVirDomainDevice=%p", self);
> +
> +    g_clear_object(&priv->domain);
> +
> +    G_OBJECT_CLASS(gvir_domain_device_parent_class)->finalize(object);
> +}
> +
> +static void gvir_domain_device_class_init(GVirDomainDeviceClass *klass)
> +{
> +    GObjectClass *object_class = G_OBJECT_CLASS (klass);
> +
> +    object_class->finalize = gvir_domain_device_finalize;
> +    object_class->get_property = gvir_domain_device_get_property;
> +    object_class->set_property = gvir_domain_device_set_property;
> +
> +    g_object_class_install_property(object_class,
> +                                    PROP_DOMAIN,
> +                                    g_param_spec_object("domain",
> +                                                        "domain",
> +                                                        "The associated domain",
> +                                                        GVIR_TYPE_DOMAIN,
> +                                                        G_PARAM_READWRITE |
> +                                                        G_PARAM_CONSTRUCT_ONLY |
> +                                                        G_PARAM_STATIC_STRINGS));
> +
> +    g_type_class_add_private(klass, sizeof(GVirDomainDevicePrivate));
> +}
> +
> +static void gvir_domain_device_init(GVirDomainDevice *self)
> +{
> +    DEBUG("Init GVirDomainDevice=%p", self);
> +
> +    self->priv = GVIR_DOMAIN_DEVICE_GET_PRIVATE(self);
> +}
> +
> +G_GNUC_INTERNAL
> +virDomainPtr gvir_domain_device_get_domain_handle(GVirDomainDevice *self)
> +{
> +    virDomainPtr handle;
> +
> +    g_object_get(self->priv->domain, "handle", &handle, NULL);
> +
> +    return handle;
> +}
> diff --git a/libvirt-gobject/libvirt-gobject-domain-device.h b/libvirt-gobject/libvirt-gobject-domain-device.h
> new file mode 100644
> index 0000000..35d70f5
> --- /dev/null
> +++ b/libvirt-gobject/libvirt-gobject-domain-device.h
> @@ -0,0 +1,64 @@
> +/*
> + * libvirt-gobject-domain-device.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: Marc-André Lureau <marcandre.lureau at redhat.com>
> + */
> +
> +#if !defined(__LIBVIRT_GOBJECT_H__) && !defined(LIBVIRT_GOBJECT_BUILD)
> +#error "Only <libvirt-gobject/libvirt-gobject.h> can be included directly."
> +#endif
> +
> +#ifndef __LIBVIRT_GOBJECT_DOMAIN_DEVICE_H__
> +#define __LIBVIRT_GOBJECT_DOMAIN_DEVICE_H__
> +
> +G_BEGIN_DECLS
> +
> +#define GVIR_TYPE_DOMAIN_DEVICE            (gvir_domain_device_get_type ())
> +#define GVIR_DOMAIN_DEVICE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GVIR_TYPE_DOMAIN_DEVICE, GVirDomainDevice))
> +#define GVIR_DOMAIN_DEVICE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GVIR_TYPE_DOMAIN_DEVICE, GVirDomainDeviceClass))
> +#define GVIR_IS_DOMAIN_DEVICE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GVIR_TYPE_DOMAIN_DEVICE))
> +#define GVIR_IS_DOMAIN_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GVIR_TYPE_DOMAIN_DEVICE))
> +#define GVIR_DOMAIN_DEVICE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GVIR_TYPE_DOMAIN_DEVICE, GVirDomainDeviceClass))
> +
> +typedef struct _GVirDomainDevice GVirDomainDevice;
> +typedef struct _GVirDomainDevicePrivate GVirDomainDevicePrivate;
> +typedef struct _GVirDomainDeviceClass GVirDomainDeviceClass;
> +
> +struct _GVirDomainDevice
> +{
> +    GObject parent;
> +
> +    GVirDomainDevicePrivate *priv;
> +
> +    /* Do not add fields to this struct */
> +};
> +
> +struct _GVirDomainDeviceClass
> +{
> +    GObjectClass parent_class;
> +
> +    gpointer padding[20];
> +};
> +
> +
> +GType gvir_domain_device_get_type(void);
> +
> +G_END_DECLS
> +
> +#endif /* __LIBVIRT_GOBJECT_DOMAIN_DEVICE_H__ */
> diff --git a/libvirt-gobject/libvirt-gobject.h b/libvirt-gobject/libvirt-gobject.h
> index 12124e9..3bec2c9 100644
> --- a/libvirt-gobject/libvirt-gobject.h
> +++ b/libvirt-gobject/libvirt-gobject.h
> @@ -30,6 +30,7 @@
>  #include <libvirt-gobject/libvirt-gobject-main.h>
>  #include <libvirt-gobject/libvirt-gobject-enums.h>
>  #include <libvirt-gobject/libvirt-gobject-stream.h>
> +#include <libvirt-gobject/libvirt-gobject-domain-device.h>
>  #include <libvirt-gobject/libvirt-gobject-domain-snapshot.h>
>  #include <libvirt-gobject/libvirt-gobject-domain.h>
>  #include <libvirt-gobject/libvirt-gobject-interface.h>
> diff --git a/libvirt-gobject/libvirt-gobject.sym b/libvirt-gobject/libvirt-gobject.sym
> index f0e8402..da03001 100644
> --- a/libvirt-gobject/libvirt-gobject.sym
> +++ b/libvirt-gobject/libvirt-gobject.sym
> @@ -29,6 +29,8 @@ LIBVIRT_GOBJECT_0.0.1 {
>  	gvir_connection_create_domain;
>  	gvir_connection_create_storage_pool;
>  
> +	gvir_domain_device_get_type;
> +
>  	gvir_domain_get_type;
>  	gvir_domain_handle_get_type;
>  	gvir_domain_info_get_type;
> -- 
> 1.7.7
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20111114/c56dd4a8/attachment-0001.sig>


More information about the libvir-list mailing list