summaryrefslogtreecommitdiff
path: root/osinfo/osinfo_db.c
diff options
context:
space:
mode:
authorDaniel P. Berrange <berrange@redhat.com>2010-08-31 12:05:38 +0100
committerDaniel P. Berrange <berrange@redhat.com>2010-08-31 12:08:52 +0100
commit7a395674e3000d044de0af91da5d57965136cc72 (patch)
treec758421023d47443c3848e38f80c87d89aada234 /osinfo/osinfo_db.c
parentc43af5932df1d3bcbb32498e54df9bbdb044970e (diff)
downloadlibosinfo-7a395674e3000d044de0af91da5d57965136cc72.tar.gz
Avoid directly exposing internal lists in OsinfoDb
Don't directly expose the OsinfoList objects used by the OsinfoDb class. Instead return a shallow copy of the lists. Add formal APIs for adding entities to the DB. * osinfo/osinfo_devicelist.c, osinfo/osinfo_devicelist.h, osinfo/osinfo_hypervisorlist.c, osinfo/osinfo_hypervisorlist.h, osinfo/osinfo_oslist.c, osinfo/osinfo_oslist.h: Add new constructor to copy an existing list * osinfo/osinfo_list.c, osinfo/osinfo_list.h: Add API to copy elements of an existing list * osinfo/osinfo_db.c, osinfo/osinfo_db.h: Shallow copy the lists before returning them. New APIs for adding entities to the DB. * test/test-list.c, test/test-db.c: Update for changed APIs
Diffstat (limited to 'osinfo/osinfo_db.c')
-rw-r--r--osinfo/osinfo_db.c34
1 files changed, 31 insertions, 3 deletions
diff --git a/osinfo/osinfo_db.c b/osinfo/osinfo_db.c
index b5bf48c..bbd860f 100644
--- a/osinfo/osinfo_db.c
+++ b/osinfo/osinfo_db.c
@@ -110,23 +110,51 @@ OsinfoOsList *osinfo_db_get_os_list(OsinfoDb *self)
{
g_return_val_if_fail(OSINFO_IS_DB(self), NULL);
- return self->priv->oses;
+ return osinfo_oslist_new_copy(self->priv->oses);
}
OsinfoHypervisorList *osinfo_db_get_hypervisor_list(OsinfoDb *self)
{
g_return_val_if_fail(OSINFO_IS_DB(self), NULL);
- return self->priv->hypervisors;
+ return osinfo_hypervisorlist_new_copy(self->priv->hypervisors);
}
OsinfoDeviceList *osinfo_db_get_device_list(OsinfoDb *self)
{
g_return_val_if_fail(OSINFO_IS_DB(self), NULL);
- return self->priv->devices;
+ return osinfo_devicelist_new_copy(self->priv->devices);
}
+
+void osinfo_db_add_os(OsinfoDb *self, OsinfoOs *os)
+{
+ g_return_if_fail(OSINFO_IS_DB(self));
+ g_return_if_fail(OSINFO_IS_OS(os));
+
+ osinfo_list_add(OSINFO_LIST(self->priv->oses), OSINFO_ENTITY(os));
+}
+
+
+void osinfo_db_add_hypervisor(OsinfoDb *self, OsinfoHypervisor *hv)
+{
+ g_return_if_fail(OSINFO_IS_DB(self));
+ g_return_if_fail(OSINFO_IS_HYPERVISOR(hv));
+
+ osinfo_list_add(OSINFO_LIST(self->priv->hypervisors), OSINFO_ENTITY(hv));
+}
+
+
+void osinfo_db_add_device(OsinfoDb *self, OsinfoDevice *device)
+{
+ g_return_if_fail(OSINFO_IS_DB(self));
+ g_return_if_fail(OSINFO_IS_DEVICE(device));
+
+ osinfo_list_add(OSINFO_LIST(self->priv->devices), OSINFO_ENTITY(device));
+}
+
+
struct osinfo_db_populate_values_args {
GHashTable *values;
const gchar *property;