[Libosinfo] [[PATCHv2] 1/7] Introducing OsinfoOsVariant
Christophe Fergeau
cfergeau at redhat.com
Thu Nov 28 07:58:01 UTC 2013
On Thu, Nov 28, 2013 at 01:07:11AM +0000, Zeeshan Ali (Khattak) wrote:
> 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_os_variant.c | 158 +++++++++++++++++++++++++++++++++++++++++++++
> osinfo/osinfo_os_variant.h | 81 +++++++++++++++++++++++
> po/POTFILES.in | 1 +
> 6 files changed, 247 insertions(+)
> create mode 100644 osinfo/osinfo_os_variant.c
> create mode 100644 osinfo/osinfo_os_variant.h
>
> diff --git a/osinfo/Makefile.am b/osinfo/Makefile.am
> index fc87123..12ec59d 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_os_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_os_variant.c \
> ignore-value.h \
> $(NULL)
>
> diff --git a/osinfo/libosinfo.syms b/osinfo/libosinfo.syms
> index fa5be4e..77b8eaa 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_os_variant_get_type;
> + osinfo_os_variant_get_name;
> + osinfo_os_variant_new;
> } LIBOSINFO_0.2.8;
>
> /* Symbols in next release...
> diff --git a/osinfo/osinfo.h b/osinfo/osinfo.h
> index 0d0f3d2..0d1f66d 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_os_variant.h>
>
> #endif
> /*
> diff --git a/osinfo/osinfo_os_variant.c b/osinfo/osinfo_os_variant.c
> new file mode 100644
> index 0000000..e6aab40
> --- /dev/null
> +++ b/osinfo/osinfo_os_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 (OsinfoOsVariant, osinfo_os_variant, OSINFO_TYPE_ENTITY);
> +
> +#define OSINFO_OS_VARIANT_GET_PRIVATE(obj) \
> + (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
> + OSINFO_TYPE_VARIANT, \
> + OsinfoOsVariantPrivate))
> +
> +/**
> + * SECTION:osinfo_os_variant
> + * @short_description: A variant of an OS
> + * @see_also: #OsinfoOs
> + *
> + * #OsinfoOsVariant is an entity representing a variant of an operating system.
> + */
> +struct _OsinfoOsVariantPrivate
> +{
> + guint64 _unused;
The boilerplate usually has gboolean, a bit surprised by this guint64 here
;) (I don't really care what you use in the end)
> +};
> +
> +enum {
> + PROP_0,
> +
> + PROP_NAME
> +};
> +
> +static void
> +osinfo_os_variant_get_property (GObject *object,
> + guint property_id,
> + GValue *value,
> + GParamSpec *pspec)
> +{
> + OsinfoOsVariant *variant = OSINFO_OS_VARIANT (object);
> +
> + switch (property_id) {
> + case PROP_NAME:
> + g_value_set_string (value,
> + osinfo_os_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_os_variant_set_property(GObject *object,
> + guint property_id,
> + const GValue *value,
> + GParamSpec *pspec)
> +{
> + OsinfoOsVariant *variant = OSINFO_OS_VARIANT (object);
> +
> + switch (property_id) {
> + case PROP_NAME:
> + osinfo_entity_set_param (OSINFO_ENTITY(variant),
> + OSINFO_OS_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_os_variant_class_init (OsinfoOsVariantClass *klass)
> +{
> + GObjectClass *g_klass = G_OBJECT_CLASS (klass);
> + GParamSpec *pspec;
> +
> + g_klass->get_property = osinfo_os_variant_get_property;
> + g_klass->set_property = osinfo_os_variant_set_property;
> + g_type_class_add_private (klass, sizeof (OsinfoOsVariantPrivate));
> +
> + /**
> + * OsinfoOsVariant: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_os_variant_init (OsinfoOsVariant *variant)
> +{
> + variant->priv = OSINFO_OS_VARIANT_GET_PRIVATE(variant);
> +}
> +
> +OsinfoOsVariant *osinfo_os_variant_new(const gchar *id)
> +{
> + OsinfoOsVariant *variant;
> +
> + variant = g_object_new(OSINFO_TYPE_VARIANT,
> + "id", id,
> + NULL);
> +
> + return variant;
> +}
> +
> +/**
> + * osinfo_os_variant_get_name:
> + * @variant: an #OsinfoOsVariant instance
> + *
> + * The name of the @variant
> + *
> + * Returns: (transfer none): the name, or NULL
> + */
> +const gchar *osinfo_os_variant_get_name(OsinfoOsVariant *variant)
> +{
> + return osinfo_entity_get_param_value(OSINFO_ENTITY(variant),
> + OSINFO_OS_VARIANT_PROP_NAME);
> +}
> +/*
> + * Local variables:
> + * indent-tabs-mode: nil
> + * c-indent-level: 4
> + * c-basic-offset: 4
> + * End:
> + */
> diff --git a/osinfo/osinfo_os_variant.h b/osinfo/osinfo_os_variant.h
> new file mode 100644
> index 0000000..33a947f
> --- /dev/null
> +++ b/osinfo/osinfo_os_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_OS_VARIANT_H__
> +#define __OSINFO_OS_VARIANT_H__
> +
> +/*
> + * Type macros.
> + */
> +#define OSINFO_TYPE_VARIANT (osinfo_os_variant_get_type ())
> +#define OSINFO_OS_VARIANT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), OSINFO_TYPE_VARIANT, OsinfoOsVariant))
> +#define OSINFO_IS_VARIANT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), OSINFO_TYPE_VARIANT))
> +#define OSINFO_OS_VARIANT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), OSINFO_TYPE_VARIANT, OsinfoOsVariantClass))
> +#define OSINFO_IS_VARIANT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), OSINFO_TYPE_VARIANT))
> +#define OSINFO_OS_VARIANT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), OSINFO_TYPE_VARIANT, OsinfoOsVariantClass))
> +
> +typedef struct _OsinfoOsVariant OsinfoOsVariant;
> +
> +typedef struct _OsinfoOsVariantClass OsinfoOsVariantClass;
> +
> +typedef struct _OsinfoOsVariantPrivate OsinfoOsVariantPrivate;
> +
> +#define OSINFO_OS_VARIANT_PROP_NAME "name"
> +
> +/* object */
> +struct _OsinfoOsVariant
> +{
> + OsinfoEntity parent_instance;
> +
> + /* public */
> +
> + /* private */
> + OsinfoOsVariantPrivate *priv;
> +};
> +
> +/* class */
> +struct _OsinfoOsVariantClass
> +{
> + /*< private >*/
> + OsinfoEntityClass parent_class;
> +
> + /* class members */
> +};
> +
> +GType osinfo_os_variant_get_type(void);
> +
> +OsinfoOsVariant *osinfo_os_variant_new(const gchar *id);
> +const gchar *osinfo_os_variant_get_name(OsinfoOsVariant *variant);
> +
> +#endif /* __OSINFO_OS_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..a1a551f 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_os_variant.c
> tools/osinfo-db-validate.c
> tools/osinfo-detect.c
> tools/osinfo-install-script.c
> --
> 1.8.4.2
>
> _______________________________________________
> Libosinfo mailing list
> Libosinfo at redhat.com
> https://www.redhat.com/mailman/listinfo/libosinfo
-------------- 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/libosinfo/attachments/20131128/0b28ed05/attachment.sig>
More information about the Libosinfo
mailing list