summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiego Escalante Urrelo <diegoe@gnome.org>2019-11-04 11:20:13 -0500
committerFabiano FidĂȘncio <fidencio@redhat.com>2019-11-06 14:21:48 +0100
commit4647abdfbfec074fe71835fac08514f51fc239dc (patch)
tree32192d502cc2a2738c2bde3899e509058c30a232
parent1f1e0e834d119fb7e83d2b6f464f68045223e135 (diff)
downloadlibosinfo-4647abdfbfec074fe71835fac08514f51fc239dc.tar.gz
list: Improve API safety
Add checks across the API to validate objects before trying to operate on them. Reviewed-by: Fabiano FidĂȘncio <fidencio@redhat.com>
-rw-r--r--osinfo/osinfo_list.c67
1 files changed, 59 insertions, 8 deletions
diff --git a/osinfo/osinfo_list.c b/osinfo/osinfo_list.c
index 343d7e1..e8fa74c 100644
--- a/osinfo/osinfo_list.c
+++ b/osinfo/osinfo_list.c
@@ -162,6 +162,8 @@ GType osinfo_list_get_element_type(OsinfoList *list)
{
OsinfoListPrivate *priv = osinfo_list_get_instance_private(list);
+ g_return_val_if_fail(OSINFO_IS_LIST(list), G_TYPE_INVALID);
+
return priv->elementType;
}
@@ -179,6 +181,8 @@ static void osinfo_list_set_element_type(OsinfoList *list, GType type)
{
OsinfoListPrivate *priv = osinfo_list_get_instance_private(list);
+ g_return_if_fail(OSINFO_IS_LIST(list));
+
priv->elementType = type;
}
@@ -196,6 +200,8 @@ gint osinfo_list_get_length(OsinfoList *list)
{
OsinfoListPrivate *priv = osinfo_list_get_instance_private(list);
+ g_return_val_if_fail(OSINFO_IS_LIST(list), 0);
+
return priv->array->len;
}
@@ -214,6 +220,9 @@ OsinfoEntity *osinfo_list_get_nth(OsinfoList *list, gint idx)
{
OsinfoListPrivate *priv = osinfo_list_get_instance_private(list);
+ g_return_val_if_fail(OSINFO_IS_LIST(list), NULL);
+ g_return_val_if_fail(priv->array->len > idx, NULL);
+
return g_ptr_array_index(priv->array, idx);
}
@@ -230,6 +239,8 @@ GList *osinfo_list_get_elements(OsinfoList *list)
{
OsinfoListPrivate *priv = osinfo_list_get_instance_private(list);
+ g_return_val_if_fail(OSINFO_IS_LIST(list), NULL);
+
return g_hash_table_get_values(priv->entities);
}
@@ -247,6 +258,8 @@ OsinfoEntity *osinfo_list_find_by_id(OsinfoList *list, const gchar *id)
{
OsinfoListPrivate *priv = osinfo_list_get_instance_private(list);
+ g_return_val_if_fail(OSINFO_IS_LIST(list), NULL);
+
return g_hash_table_lookup(priv->entities, id);
}
@@ -263,6 +276,7 @@ void osinfo_list_add(OsinfoList *list, OsinfoEntity *entity)
OsinfoListPrivate *priv = osinfo_list_get_instance_private(list);
OsinfoEntity *preexisting;
+ g_return_if_fail(OSINFO_IS_LIST(list));
g_return_if_fail(G_TYPE_CHECK_INSTANCE_TYPE(entity, priv->elementType));
g_object_ref(entity);
@@ -290,6 +304,7 @@ void osinfo_list_add_filtered(OsinfoList *list, OsinfoList *source, OsinfoFilter
{
int i, len;
+ g_return_if_fail(OSINFO_IS_LIST(list));
g_return_if_fail(osinfo_list_get_element_type(list) == osinfo_list_get_element_type(source));
len = osinfo_list_get_length(source);
@@ -315,6 +330,8 @@ void osinfo_list_add_filtered(OsinfoList *list, OsinfoList *source, OsinfoFilter
void osinfo_list_add_intersection(OsinfoList *list, OsinfoList *sourceOne, OsinfoList *sourceTwo)
{
int i, len;
+
+ g_return_if_fail(OSINFO_IS_LIST(list));
g_return_if_fail(osinfo_list_get_element_type(list) == osinfo_list_get_element_type(sourceOne));
g_return_if_fail(osinfo_list_get_element_type(list) == osinfo_list_get_element_type(sourceTwo));
@@ -361,6 +378,8 @@ void osinfo_list_add_union(OsinfoList *list, OsinfoList *sourceOne, OsinfoList *
{
// Make set version of new list
GHashTable *newSet;
+
+ g_return_if_fail(OSINFO_IS_LIST(list));
g_return_if_fail(osinfo_list_get_element_type(list) == osinfo_list_get_element_type(sourceOne));
g_return_if_fail(osinfo_list_get_element_type(list) == osinfo_list_get_element_type(sourceTwo));
@@ -401,6 +420,8 @@ void osinfo_list_add_union(OsinfoList *list, OsinfoList *sourceOne, OsinfoList *
void osinfo_list_add_all(OsinfoList *list, OsinfoList *source)
{
int i, len;
+
+ g_return_if_fail(OSINFO_IS_LIST(list));
g_return_if_fail(osinfo_list_get_element_type(list) == osinfo_list_get_element_type(source));
len = osinfo_list_get_length(source);
@@ -447,9 +468,16 @@ static OsinfoList *osinfo_list_new_same(OsinfoList *sourceOne,
*/
OsinfoList *osinfo_list_new_copy(OsinfoList *source)
{
- OsinfoList *newList = osinfo_list_new_same(source, NULL);
- g_return_val_if_fail(newList != NULL, NULL);
+ OsinfoList *newList;
+
+ g_return_val_if_fail(OSINFO_IS_LIST(source), NULL);
+
+ newList = osinfo_list_new_same(source, NULL);
+
+ g_return_val_if_fail(OSINFO_IS_LIST(newList), NULL);
+
osinfo_list_add_all(newList, source);
+
return newList;
}
@@ -467,9 +495,16 @@ OsinfoList *osinfo_list_new_copy(OsinfoList *source)
*/
OsinfoList *osinfo_list_new_filtered(OsinfoList *source, OsinfoFilter *filter)
{
- OsinfoList *newList = osinfo_list_new_same(source, NULL);
- g_return_val_if_fail(newList != NULL, NULL);
+ OsinfoList *newList;
+
+ g_return_val_if_fail(OSINFO_IS_LIST(source), NULL);
+
+ newList = osinfo_list_new_same(source, NULL);
+
+ g_return_val_if_fail(OSINFO_IS_LIST(newList), NULL);
+
osinfo_list_add_filtered(newList, source, filter);
+
return newList;
}
@@ -488,9 +523,17 @@ OsinfoList *osinfo_list_new_filtered(OsinfoList *source, OsinfoFilter *filter)
OsinfoList *osinfo_list_new_intersection(OsinfoList *sourceOne,
OsinfoList *sourceTwo)
{
- OsinfoList *newList = osinfo_list_new_same(sourceOne, sourceTwo);
- g_return_val_if_fail(newList != NULL, NULL);
+ OsinfoList *newList;
+
+ g_return_val_if_fail(OSINFO_IS_LIST(sourceOne), NULL);
+ g_return_val_if_fail(OSINFO_IS_LIST(sourceTwo), NULL);
+
+ newList = osinfo_list_new_same(sourceOne, sourceTwo);
+
+ g_return_val_if_fail(OSINFO_IS_LIST(newList), NULL);
+
osinfo_list_add_intersection(newList, sourceOne, sourceTwo);
+
return newList;
}
@@ -510,8 +553,16 @@ OsinfoList *osinfo_list_new_intersection(OsinfoList *sourceOne,
OsinfoList *osinfo_list_new_union(OsinfoList *sourceOne,
OsinfoList *sourceTwo)
{
- OsinfoList *newList = osinfo_list_new_same(sourceOne, sourceTwo);
- g_return_val_if_fail(newList != NULL, NULL);
+ OsinfoList *newList;
+
+ g_return_val_if_fail(OSINFO_IS_LIST(sourceOne), NULL);
+ g_return_val_if_fail(OSINFO_IS_LIST(sourceTwo), NULL);
+
+ newList = osinfo_list_new_same(sourceOne, sourceTwo);
+
+ g_return_val_if_fail(OSINFO_IS_LIST(newList), NULL);
+
osinfo_list_add_union(newList, sourceOne, sourceTwo);
+
return newList;
}