[virt-tools-list] [libosinfo 01/10] Add DeviceDriver class
Zeeshan Ali (Khattak)
zeeshanak at gnome.org
Wed Dec 5 14:02:57 UTC 2012
From: "Zeeshan Ali (Khattak)" <zeeshanak at gnome.org>
---
osinfo/Makefile.am | 3 +
osinfo/libosinfo.syms | 7 ++
osinfo/osinfo.h | 1 +
osinfo/osinfo_device_driver.c | 181 ++++++++++++++++++++++++++++++++++
osinfo/osinfo_device_driver.h | 93 +++++++++++++++++
osinfo/osinfo_device_driver_private.h | 41 ++++++++
6 files changed, 326 insertions(+)
create mode 100644 osinfo/osinfo_device_driver.c
create mode 100644 osinfo/osinfo_device_driver.h
create mode 100644 osinfo/osinfo_device_driver_private.h
diff --git a/osinfo/Makefile.am b/osinfo/Makefile.am
index c8a831b..996a498 100644
--- a/osinfo/Makefile.am
+++ b/osinfo/Makefile.am
@@ -59,6 +59,7 @@ libosinfo_1_0_include_HEADERS = \
osinfo_db.h \
osinfo_loader.h \
osinfo_device.h \
+ osinfo_device_driver.h \
osinfo_devicelink.h \
osinfo_devicelist.h \
osinfo_devicelinklist.h \
@@ -95,6 +96,8 @@ libosinfo_1_0_la_SOURCES = \
osinfo_filter.c \
osinfo_list.c \
osinfo_device.c \
+ osinfo_device_driver.c \
+ osinfo_device_driver_private.h \
osinfo_devicelink.c \
osinfo_devicelist.c \
osinfo_devicelinklist.c \
diff --git a/osinfo/libosinfo.syms b/osinfo/libosinfo.syms
index 2824678..09c0d3e 100644
--- a/osinfo/libosinfo.syms
+++ b/osinfo/libosinfo.syms
@@ -323,6 +323,13 @@ LIBOSINFO_0.2.2 {
osinfo_avatar_format_get_height;
osinfo_avatar_format_get_alpha;
+ osinfo_device_driver_get_type;
+ osinfo_device_driver_get_architecture;
+ osinfo_device_driver_get_devices;
+ osinfo_device_driver_get_location;
+ osinfo_device_driver_get_files;
+ osinfo_device_driver_get_pre_installable;
+
osinfo_install_config_param_policy_get_type;
osinfo_media_error_get_type;
osinfo_product_relationship_get_type;
diff --git a/osinfo/osinfo.h b/osinfo/osinfo.h
index 559eaa8..7acd70a 100644
--- a/osinfo/osinfo.h
+++ b/osinfo/osinfo.h
@@ -32,6 +32,7 @@
#include <osinfo/osinfo_filter.h>
#include <osinfo/osinfo_list.h>
#include <osinfo/osinfo_device.h>
+#include <osinfo/osinfo_device_driver.h>
#include <osinfo/osinfo_devicelink.h>
#include <osinfo/osinfo_devicelist.h>
#include <osinfo/osinfo_devicelinklist.h>
diff --git a/osinfo/osinfo_device_driver.c b/osinfo/osinfo_device_driver.c
new file mode 100644
index 0000000..9a7e5e2
--- /dev/null
+++ b/osinfo/osinfo_device_driver.c
@@ -0,0 +1,181 @@
+/*
+ * libosinfo: Device driver
+ *
+ * Copyright (C) 2009-2012 Red Hat, Inc.
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Authors:
+ * Zeeshan Ali <zeenix at redhat.com>
+ */
+
+#include <config.h>
+
+#include <osinfo/osinfo.h>
+#include <gio/gio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <glib/gi18n-lib.h>
+
+#include "osinfo_device_driver_private.h"
+
+G_DEFINE_TYPE (OsinfoDeviceDriver, osinfo_device_driver, OSINFO_TYPE_ENTITY);
+
+#define OSINFO_DEVICE_DRIVER_GET_PRIVATE(obj) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
+ OSINFO_TYPE_DEVICE_DRIVER, \
+ OsinfoDeviceDriverPrivate))
+
+/**
+ * SECTION:osinfo_device_driver
+ * @short_description: Information about device driver
+ * @see_also: #OsinfoOs
+ *
+ * #OsinfoDeviceDriver is an entity representing device drivers for an (guest)
+ * operating system.
+ */
+
+struct _OsinfoDeviceDriverPrivate
+{
+ OsinfoDeviceList *devices;
+};
+
+static void
+osinfo_device_driver_finalize (GObject *object)
+{
+ OsinfoDeviceDriver *driver = OSINFO_DEVICE_DRIVER (object);
+
+ g_object_unref(driver->priv->devices);
+
+ /* Chain up to the parent class */
+ G_OBJECT_CLASS (osinfo_device_driver_parent_class)->finalize (object);
+}
+
+/* Init functions */
+static void
+osinfo_device_driver_class_init (OsinfoDeviceDriverClass *klass)
+{
+ GObjectClass *g_klass = G_OBJECT_CLASS (klass);
+
+ g_klass->finalize = osinfo_device_driver_finalize;
+ g_type_class_add_private (klass, sizeof (OsinfoDeviceDriverPrivate));
+}
+
+static void
+osinfo_device_driver_init (OsinfoDeviceDriver *driver)
+{
+ OsinfoDeviceDriverPrivate *priv;
+ driver->priv = priv = OSINFO_DEVICE_DRIVER_GET_PRIVATE(driver);
+
+ priv->devices = osinfo_devicelist_new ();
+}
+
+OsinfoDeviceDriver *osinfo_device_driver_new(const gchar *id)
+{
+ OsinfoDeviceDriver *driver;
+
+ driver = g_object_new (OSINFO_TYPE_DEVICE_DRIVER,
+ "id", id,
+ NULL);
+
+ return driver;
+}
+
+/**
+ * osinfo_device_driver_get_architecture:
+ * @driver: a #OsinfoDeviceDriver instance
+ *
+ * Retrieves the target hardware architecture of @driver.
+ *
+ * Returns: (transfer none): the hardware architecture.
+ */
+const gchar *osinfo_device_driver_get_architecture(OsinfoDeviceDriver *driver)
+{
+ return osinfo_entity_get_param_value(OSINFO_ENTITY(driver),
+ OSINFO_DEVICE_DRIVER_PROP_ARCHITECTURE);
+}
+
+/**
+ * osinfo_device_driver_get_location:
+ * @driver: a #OsinfoDeviceDriver instance
+ *
+ * Retrieves the location of the @driver as a URL.
+ *
+ * Returns: (transfer none): the location of the driver.
+ */
+const gchar *osinfo_device_driver_get_location(OsinfoDeviceDriver *driver)
+{
+ return osinfo_entity_get_param_value(OSINFO_ENTITY(driver),
+ OSINFO_DEVICE_DRIVER_PROP_LOCATION);
+}
+
+/**
+ * osinfo_device_driver_get_files:
+ * @driver: a #OsinfoDeviceDriver instance
+ *
+ * Retrieves the names of driver files under the location returned by
+ * #osinfo_device_driver_get_location.
+ *
+ * Returns: (transfer container) (element-type utf8): The list of driver files.
+ */
+GList *osinfo_device_driver_get_files(OsinfoDeviceDriver *driver)
+{
+ return osinfo_entity_get_param_value_list(OSINFO_ENTITY(driver),
+ OSINFO_DEVICE_DRIVER_PROP_FILE);
+}
+
+/**
+ * osinfo_device_driver_get_pre_installable:
+ * @driver: a #OsinfoDeviceDriver instance
+ *
+ * Returns: TRUE if @driver is pre-installable, FALSE otherwise.
+ */
+gboolean osinfo_device_driver_get_pre_installable(OsinfoDeviceDriver *driver)
+{
+ return osinfo_entity_get_param_value_boolean
+ (OSINFO_ENTITY(driver),
+ OSINFO_DEVICE_DRIVER_PROP_PRE_INSTALLABLE);
+}
+
+/**
+ * osinfo_device_driver_get_devices:
+ * @driver: a #OsinfoDeviceDriver instance
+ *
+ * Returns: (transfer none): The list of devices supported by this driver.
+ */
+OsinfoDeviceList *osinfo_device_driver_get_devices(OsinfoDeviceDriver *driver)
+{
+ g_return_val_if_fail(OSINFO_IS_DEVICE_DRIVER(driver), NULL);
+
+ return driver->priv->devices;
+}
+
+void osinfo_device_driver_add_device(OsinfoDeviceDriver *driver,
+ OsinfoDevice *device)
+{
+ g_return_if_fail(OSINFO_IS_DEVICE_DRIVER(driver));
+ g_return_if_fail(OSINFO_IS_DEVICE(device));
+
+ osinfo_list_add(OSINFO_LIST(driver->priv->devices),
+ OSINFO_ENTITY(device));
+}
+
+/*
+ * Local variables:
+ * indent-tabs-mode: nil
+ * c-indent-level: 4
+ * c-basic-offset: 4
+ * End:
+ */
diff --git a/osinfo/osinfo_device_driver.h b/osinfo/osinfo_device_driver.h
new file mode 100644
index 0000000..81e462c
--- /dev/null
+++ b/osinfo/osinfo_device_driver.h
@@ -0,0 +1,93 @@
+/*
+ * libosinfo: Device driver
+ *
+ * Copyright (C) 2009-2012 Red Hat, Inc.
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Authors:
+ * Zeeshan Ali <zeenix at redhat.com>
+ */
+
+#include <glib-object.h>
+#include <gio/gio.h>
+#include <osinfo/osinfo_entity.h>
+#include <osinfo/osinfo_devicelist.h>
+
+#ifndef __OSINFO_DEVICE_DRIVER_H__
+#define __OSINFO_DEVICE_DRIVER_H__
+
+/*
+ * Type macros.
+ */
+#define OSINFO_TYPE_DEVICE_DRIVER (osinfo_device_driver_get_type ())
+#define OSINFO_DEVICE_DRIVER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ OSINFO_TYPE_DEVICE_DRIVER, OsinfoDeviceDriver))
+#define OSINFO_IS_DEVICE_DRIVER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+ OSINFO_TYPE_DEVICE_DRIVER))
+#define OSINFO_DEVICE_DRIVER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), \
+ OSINFO_TYPE_DEVICE_DRIVER, OsinfoDeviceDriverClass))
+#define OSINFO_IS_DEVICE_DRIVER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ OSINFO_TYPE_DEVICE_DRIVER))
+#define OSINFO_DEVICE_DRIVER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ OSINFO_TYPE_DEVICE_DRIVER, OsinfoDeviceDriverClass))
+
+typedef struct _OsinfoDeviceDriver OsinfoDeviceDriver;
+
+typedef struct _OsinfoDeviceDriverClass OsinfoDeviceDriverClass;
+
+typedef struct _OsinfoDeviceDriverPrivate OsinfoDeviceDriverPrivate;
+
+#define OSINFO_DEVICE_DRIVER_PROP_ARCHITECTURE "arch"
+#define OSINFO_DEVICE_DRIVER_PROP_LOCATION "location"
+#define OSINFO_DEVICE_DRIVER_PROP_PRE_INSTALLABLE "pre-installable"
+#define OSINFO_DEVICE_DRIVER_PROP_FILE "file"
+#define OSINFO_DEVICE_DRIVER_PROP_DEVICE "device"
+
+/* object */
+struct _OsinfoDeviceDriver
+{
+ OsinfoEntity parent_instance;
+
+ /* public */
+
+ /* private */
+ OsinfoDeviceDriverPrivate *priv;
+};
+
+/* class */
+struct _OsinfoDeviceDriverClass
+{
+ OsinfoEntityClass parent_class;
+
+ /* class members */
+};
+
+GType osinfo_device_driver_get_type(void);
+
+const gchar *osinfo_device_driver_get_architecture(OsinfoDeviceDriver *driver);
+const gchar *osinfo_device_driver_get_location(OsinfoDeviceDriver *driver);
+gboolean osinfo_device_driver_get_pre_installable(OsinfoDeviceDriver *driver);
+GList *osinfo_device_driver_get_files(OsinfoDeviceDriver *driver);
+OsinfoDeviceList *osinfo_device_driver_get_devices(OsinfoDeviceDriver *driver);
+
+#endif /* __OSINFO_DEVICE_DRIVER_H__ */
+/*
+ * Local variables:
+ * indent-tabs-mode: nil
+ * c-indent-level: 4
+ * c-basic-offset: 4
+ * End:
+ */
diff --git a/osinfo/osinfo_device_driver_private.h b/osinfo/osinfo_device_driver_private.h
new file mode 100644
index 0000000..d49ffa1
--- /dev/null
+++ b/osinfo/osinfo_device_driver_private.h
@@ -0,0 +1,41 @@
+/*
+ * libosinfo: Device driver
+ *
+ * Copyright (C) 2009-2012 Red Hat, Inc.
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Authors:
+ * Zeeshan Ali <zeenix at redhat.com>
+ */
+
+#include "osinfo_device_driver.h"
+
+#ifndef __OSINFO_DEVICE_DRIVER_PRIVATE_H__
+#define __OSINFO_DEVICE_DRIVER_PRIVATE_H__
+
+OsinfoDeviceDriver *osinfo_device_driver_new(const gchar *id);
+void osinfo_device_driver_add_device(OsinfoDeviceDriver *driver,
+ OsinfoDevice *device);
+
+#endif /* __OSINFO_DEVICE_DRIVER_PRIVATE_H__ */
+
+/*
+ * Local variables:
+ * indent-tabs-mode: nil
+ * c-indent-level: 4
+ * c-basic-offset: 4
+ * End:
+ */
--
1.8.0.1
More information about the virt-tools-list
mailing list