--- osinfo/Makefile.am | 1 + osinfo/libosinfo.syms | 2 ++ osinfo/osinfo_media.c | 55 ++++++++++++++++++++++++++++++++++++++++++- osinfo/osinfo_media.h | 1 + osinfo/osinfo_media_private.h | 38 ++++++++++++++++++++++++++++++ 5 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 osinfo/osinfo_media_private.h diff --git a/osinfo/Makefile.am b/osinfo/Makefile.am index 20b1ac4..056373f 100644 --- a/osinfo/Makefile.am +++ b/osinfo/Makefile.am @@ -127,6 +127,7 @@ libosinfo_1_0_la_SOURCES = \ osinfo_deployment.c \ osinfo_deploymentlist.c \ osinfo_media.c \ + osinfo_media_private.h \ osinfo_medialist.c \ osinfo_resources.c \ osinfo_resourceslist.c \ diff --git a/osinfo/libosinfo.syms b/osinfo/libosinfo.syms index c5ab005..95fde94 100644 --- a/osinfo/libosinfo.syms +++ b/osinfo/libosinfo.syms @@ -395,6 +395,8 @@ LIBOSINFO_0.2.3 { osinfo_install_config_paramlist_new; osinfo_install_script_get_config_params; + + osinfo_media_get_os; } LIBOSINFO_0.2.2; /* Symbols in next release... diff --git a/osinfo/osinfo_media.c b/osinfo/osinfo_media.c index ffc37b7..1db374c 100644 --- a/osinfo/osinfo_media.c +++ b/osinfo/osinfo_media.c @@ -26,6 +26,7 @@ #include <config.h> #include <osinfo/osinfo.h> +#include "osinfo_media_private.h" #include <gio/gio.h> #include <stdlib.h> #include <string.h> @@ -136,7 +137,7 @@ G_DEFINE_TYPE (OsinfoMedia, osinfo_media, OSINFO_TYPE_ENTITY); struct _OsinfoMediaPrivate { - gboolean unused; + GWeakRef os; }; enum { @@ -153,6 +154,7 @@ enum { PROP_INSTALLER, PROP_LIVE, PROP_INSTALLER_REBOOTS, + PROP_OS }; static void @@ -219,6 +221,10 @@ osinfo_media_get_property (GObject *object, osinfo_media_get_installer_reboots (media)); break; + case PROP_OS: + g_value_take_object (value, osinfo_media_get_os (media)); + break; + default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); @@ -301,6 +307,10 @@ osinfo_media_set_property(GObject *object, g_value_get_int (value)); break; + case PROP_OS: + osinfo_media_set_os(media, g_value_get_object(value)); + break; + default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); @@ -315,6 +325,16 @@ osinfo_media_finalize (GObject *object) G_OBJECT_CLASS (osinfo_media_parent_class)->finalize (object); } +static void osinfo_media_dispose(GObject *obj) +{ + OsinfoMedia *media = OSINFO_MEDIA(obj); + + g_weak_ref_clear(&media->priv->os); + + G_OBJECT_CLASS(osinfo_media_parent_class)->dispose(obj); +} + + /* Init functions */ static void osinfo_media_class_init (OsinfoMediaClass *klass) @@ -322,6 +342,7 @@ osinfo_media_class_init (OsinfoMediaClass *klass) GObjectClass *g_klass = G_OBJECT_CLASS (klass); GParamSpec *pspec; + g_klass->dispose = osinfo_media_dispose; g_klass->finalize = osinfo_media_finalize; g_klass->get_property = osinfo_media_get_property; g_klass->set_property = osinfo_media_set_property; @@ -480,6 +501,19 @@ osinfo_media_class_init (OsinfoMediaClass *klass) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (g_klass, PROP_INSTALLER_REBOOTS, pspec); + + /** + * OsinfoMedia::os: + * + * Os information for the current media. + */ + pspec = g_param_spec_object ("os", + "Os", + _("Information about the operating system on this media"), + OSINFO_TYPE_OS, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS); + g_object_class_install_property (g_klass, PROP_OS, pspec); } static void @@ -487,6 +521,7 @@ osinfo_media_init (OsinfoMedia *media) { OsinfoMediaPrivate *priv; media->priv = priv = OSINFO_MEDIA_GET_PRIVATE(media); + g_weak_ref_init(&media->priv->os, NULL); } OsinfoMedia *osinfo_media_new(const gchar *id, @@ -1046,6 +1081,24 @@ gint osinfo_media_get_installer_reboots(OsinfoMedia *media) (OSINFO_ENTITY(media), OSINFO_MEDIA_PROP_INSTALLER_REBOOTS, 1); } +/* osinfo_media_get_os: + * Returns: (transfer full): + */ +OsinfoOs *osinfo_media_get_os(OsinfoMedia *media) +{ + g_return_val_if_fail(OSINFO_IS_MEDIA(media), NULL); + + return g_weak_ref_get(&media->priv->os); +} + +void osinfo_media_set_os(OsinfoMedia *media, OsinfoOs *os) +{ + g_return_if_fail(OSINFO_IS_MEDIA(media)); + + g_object_ref(os); + g_weak_ref_set(&media->priv->os, os); + g_object_unref(os); +} /* * Local variables: * indent-tabs-mode: nil diff --git a/osinfo/osinfo_media.h b/osinfo/osinfo_media.h index ee37905..8d34688 100644 --- a/osinfo/osinfo_media.h +++ b/osinfo/osinfo_media.h @@ -124,6 +124,7 @@ const gchar *osinfo_media_get_publisher_id(OsinfoMedia *media); const gchar *osinfo_media_get_application_id(OsinfoMedia *media); const gchar *osinfo_media_get_kernel_path(OsinfoMedia *media); const gchar *osinfo_media_get_initrd_path(OsinfoMedia *media); +OsinfoOs *osinfo_media_get_os(OsinfoMedia *media); gboolean osinfo_media_get_installer(OsinfoMedia *media); gboolean osinfo_media_get_live(OsinfoMedia *media); gint osinfo_media_get_installer_reboots(OsinfoMedia *media); diff --git a/osinfo/osinfo_media_private.h b/osinfo/osinfo_media_private.h new file mode 100644 index 0000000..00ae697 --- /dev/null +++ b/osinfo/osinfo_media_private.h @@ -0,0 +1,38 @@ +/* + * libosinfo: An installation media for a (guest) OS + * + * 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: + * Christophe Fergeau <cfergeau@xxxxxxxxxx> + */ + +#include <osinfo/osinfo_media.h> + +#ifndef __OSINFO_MEDIA_PRIVATE_H__ +#define __OSINFO_MEDIA_PRIVATE_H__ + +void osinfo_media_set_os(OsinfoMedia *media, OsinfoOs *os); + +#endif /* __OSINFO_MEDIA_PRIVATE_H__ */ +/* + * Local variables: + * indent-tabs-mode: nil + * c-indent-level: 4 + * c-basic-offset: 4 + * End: + */ -- 1.8.0.1 _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list