diff options
author | Daniel P. Berrange <berrange@redhat.com> | 2010-08-31 12:05:38 +0100 |
---|---|---|
committer | Daniel P. Berrange <berrange@redhat.com> | 2010-08-31 12:08:52 +0100 |
commit | 7a395674e3000d044de0af91da5d57965136cc72 (patch) | |
tree | c758421023d47443c3848e38f80c87d89aada234 /osinfo/osinfo_db.c | |
parent | c43af5932df1d3bcbb32498e54df9bbdb044970e (diff) | |
download | libosinfo-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.c | 34 |
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; |