[Libosinfo] [PATCH 1/7] Introducing OsinfoVariant
Zeeshan Ali (Khattak)
zeeshanak at gnome.org
Tue Nov 26 16:16:27 UTC 2013
This is a new entity class that will represent variants of an OS. For
example professional, enterprise and ultimate editions of Windows OSs
and workstation and server variants of RHEL etc.
---
osinfo/Makefile.am | 2 +
osinfo/libosinfo.syms | 4 ++
osinfo/osinfo.h | 1 +
osinfo/osinfo_variant.c | 158 ++++++++++++++++++++++++++++++++++++++++++++++++
osinfo/osinfo_variant.h | 81 +++++++++++++++++++++++++
po/POTFILES.in | 1 +
6 files changed, 247 insertions(+)
create mode 100644 osinfo/osinfo_variant.c
create mode 100644 osinfo/osinfo_variant.h
diff --git a/osinfo/Makefile.am b/osinfo/Makefile.am
index fc87123..17e1964 100644
--- a/osinfo/Makefile.am
+++ b/osinfo/Makefile.am
@@ -90,6 +90,7 @@ OSINFO_HEADER_FILES = \
osinfo_resourceslist.h \
osinfo_tree.h \
osinfo_treelist.h \
+ osinfo_variant.h \
$(NULL)
libosinfo_1_0_include_HEADERS = \
@@ -138,6 +139,7 @@ libosinfo_1_0_la_SOURCES = \
osinfo_treelist.c \
osinfo_db.c \
osinfo_loader.c \
+ osinfo_variant.c \
ignore-value.h \
$(NULL)
diff --git a/osinfo/libosinfo.syms b/osinfo/libosinfo.syms
index fa5be4e..a6f6cc6 100644
--- a/osinfo/libosinfo.syms
+++ b/osinfo/libosinfo.syms
@@ -447,6 +447,10 @@ LIBOSINFO_0.2.8 {
LIBOSINFO_0.2.9 {
osinfo_os_get_release_status;
osinfo_release_status_get_type;
+
+ osinfo_variant_get_type;
+ osinfo_variant_get_name;
+ osinfo_variant_new;
} LIBOSINFO_0.2.8;
/* Symbols in next release...
diff --git a/osinfo/osinfo.h b/osinfo/osinfo.h
index 0d0f3d2..e06094e 100644
--- a/osinfo/osinfo.h
+++ b/osinfo/osinfo.h
@@ -63,6 +63,7 @@
#include <osinfo/osinfo_treelist.h>
#include <osinfo/osinfo_db.h>
#include <osinfo/osinfo_loader.h>
+#include <osinfo/osinfo_variant.h>
#endif
/*
diff --git a/osinfo/osinfo_variant.c b/osinfo/osinfo_variant.c
new file mode 100644
index 0000000..3a7230a
--- /dev/null
+++ b/osinfo/osinfo_variant.c
@@ -0,0 +1,158 @@
+/*
+ * libosinfo: The variant of an OS
+ *
+ * Copyright (C) 2013 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, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * Authors:
+ * Zeeshan Ali <zeenix at redhat.com>
+ */
+
+#include <config.h>
+
+#include <osinfo/osinfo.h>
+#include <glib/gi18n-lib.h>
+
+G_DEFINE_TYPE (OsinfoVariant, osinfo_variant, OSINFO_TYPE_ENTITY);
+
+#define OSINFO_VARIANT_GET_PRIVATE(obj) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
+ OSINFO_TYPE_VARIANT, \
+ OsinfoVariantPrivate))
+
+/**
+ * SECTION:osinfo_variant
+ * @short_description: A variant of an OS
+ * @see_also: #OsinfoOs
+ *
+ * #OsinfoVariant is an entity representing a variant of an operating system.
+ */
+struct _OsinfoVariantPrivate
+{
+ guint64 _unused;
+};
+
+enum {
+ PROP_0,
+
+ PROP_NAME
+};
+
+static void
+osinfo_variant_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ OsinfoVariant *variant = OSINFO_VARIANT (object);
+
+ switch (property_id) {
+ case PROP_NAME:
+ g_value_set_string (value,
+ osinfo_variant_get_name (variant));
+ break;
+
+ default:
+ /* We don't have any other property... */
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+osinfo_variant_set_property(GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ OsinfoVariant *variant = OSINFO_VARIANT (object);
+
+ switch (property_id) {
+ case PROP_NAME:
+ osinfo_entity_set_param (OSINFO_ENTITY(variant),
+ OSINFO_VARIANT_PROP_NAME,
+ g_value_get_string (value));
+ break;
+
+ default:
+ /* We don't have any other property... */
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+/* Init functions */
+static void
+osinfo_variant_class_init (OsinfoVariantClass *klass)
+{
+ GObjectClass *g_klass = G_OBJECT_CLASS (klass);
+ GParamSpec *pspec;
+
+ g_klass->get_property = osinfo_variant_get_property;
+ g_klass->set_property = osinfo_variant_set_property;
+ g_type_class_add_private (klass, sizeof (OsinfoVariantPrivate));
+
+ /**
+ * OsinfoVariant:name:
+ *
+ * The name to this variant.
+ */
+ pspec = g_param_spec_string ("name",
+ "Name",
+ _("The name to this variant"),
+ NULL /* default value */,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS);
+ g_object_class_install_property (g_klass, PROP_NAME, pspec);
+}
+
+static void
+osinfo_variant_init (OsinfoVariant *variant)
+{
+ variant->priv = OSINFO_VARIANT_GET_PRIVATE(variant);
+}
+
+OsinfoVariant *osinfo_variant_new(const gchar *id)
+{
+ OsinfoVariant *variant;
+
+ variant = g_object_new(OSINFO_TYPE_VARIANT,
+ "id", id,
+ NULL);
+
+ return variant;
+}
+
+/**
+ * osinfo_variant_get_name:
+ * @variant: an #OsinfoVariant instance
+ *
+ * The name of the @variant
+ *
+ * Returns: (transfer none): the name, or NULL
+ */
+const gchar *osinfo_variant_get_name(OsinfoVariant *variant)
+{
+ return osinfo_entity_get_param_value(OSINFO_ENTITY(variant),
+ OSINFO_VARIANT_PROP_NAME);
+}
+/*
+ * Local variables:
+ * indent-tabs-mode: nil
+ * c-indent-level: 4
+ * c-basic-offset: 4
+ * End:
+ */
diff --git a/osinfo/osinfo_variant.h b/osinfo/osinfo_variant.h
new file mode 100644
index 0000000..1c9aff4
--- /dev/null
+++ b/osinfo/osinfo_variant.h
@@ -0,0 +1,81 @@
+/*
+ * libosinfo: The variant of an OS
+ *
+ * Copyright (C) 2013 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, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * Authors:
+ * Zeeshan Ali <zeenix at redhat.com>
+ */
+
+#include <glib-object.h>
+#include <gio/gio.h>
+#include <osinfo/osinfo_entity.h>
+
+#ifndef __OSINFO_VARIANT_H__
+#define __OSINFO_VARIANT_H__
+
+/*
+ * Type macros.
+ */
+#define OSINFO_TYPE_VARIANT (osinfo_variant_get_type ())
+#define OSINFO_VARIANT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), OSINFO_TYPE_VARIANT, OsinfoVariant))
+#define OSINFO_IS_VARIANT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), OSINFO_TYPE_VARIANT))
+#define OSINFO_VARIANT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), OSINFO_TYPE_VARIANT, OsinfoVariantClass))
+#define OSINFO_IS_VARIANT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), OSINFO_TYPE_VARIANT))
+#define OSINFO_VARIANT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), OSINFO_TYPE_VARIANT, OsinfoVariantClass))
+
+typedef struct _OsinfoVariant OsinfoVariant;
+
+typedef struct _OsinfoVariantClass OsinfoVariantClass;
+
+typedef struct _OsinfoVariantPrivate OsinfoVariantPrivate;
+
+#define OSINFO_VARIANT_PROP_NAME "name"
+
+/* object */
+struct _OsinfoVariant
+{
+ OsinfoEntity parent_instance;
+
+ /* public */
+
+ /* private */
+ OsinfoVariantPrivate *priv;
+};
+
+/* class */
+struct _OsinfoVariantClass
+{
+ /*< private >*/
+ OsinfoEntityClass parent_class;
+
+ /* class members */
+};
+
+GType osinfo_variant_get_type(void);
+
+OsinfoVariant *osinfo_variant_new(const gchar *id);
+const gchar *osinfo_variant_get_name(OsinfoVariant *variant);
+
+#endif /* __OSINFO_VARIANT_H__ */
+/*
+ * Local variables:
+ * indent-tabs-mode: nil
+ * c-indent-level: 4
+ * c-basic-offset: 4
+ * End:
+ */
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 8cbabed..f928bc6 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -41,6 +41,7 @@ osinfo/osinfo_os.c
osinfo/osinfo_product.c
osinfo/osinfo_resources.c
osinfo/osinfo_tree.c
+osinfo/osinfo_variant.c
tools/osinfo-db-validate.c
tools/osinfo-detect.c
tools/osinfo-install-script.c
--
1.8.4.2
More information about the Libosinfo
mailing list