[gom] filter: use a copy of the value array
- From: Mathieu Bridon <mbridon src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gom] filter: use a copy of the value array
- Date: Wed, 12 Aug 2015 08:50:05 +0000 (UTC)
commit 7d183492765609162501ed4f9a3c31dd45585a02
Author: Christian Hergert <christian hergert me>
Date: Fri Aug 7 19:16:52 2015 +0200
filter: use a copy of the value array
In GObject Introspection, we can't expect transfer of ownership of the
array. So we will just make a copy of the array.
gom/gom-filter.c | 37 ++++++++++++++++++++++++++++++-------
gom/gom-filter.h | 2 +-
2 files changed, 31 insertions(+), 8 deletions(-)
---
diff --git a/gom/gom-filter.c b/gom/gom-filter.c
index 8143339..51c8a80 100644
--- a/gom/gom-filter.c
+++ b/gom/gom-filter.c
@@ -75,14 +75,35 @@ static const gchar *gOperators[] = {
* Returns: (transfer full): A new #GomFilter.
*/
GomFilter *
-gom_filter_new_sql (const gchar *sql,
- GArray *values)
-{
- GomFilter *filter = g_object_new(GOM_TYPE_FILTER,
- "mode", GOM_FILTER_SQL,
- "sql", sql,
- NULL);
- filter->priv->values = g_array_ref(values);
+gom_filter_new_sql (const gchar *sql,
+ const GArray *values)
+{
+ GomFilter *filter;
+
+ g_return_val_if_fail (sql != NULL, NULL);
+
+ filter = g_object_new (GOM_TYPE_FILTER,
+ "mode", GOM_FILTER_SQL,
+ "sql", sql,
+ NULL);
+
+ if (values != NULL) {
+ guint i;
+
+ filter->priv->values = g_array_sized_new (FALSE, FALSE, sizeof(GValue), values->len);
+ g_array_set_clear_func (filter->priv->values, (GDestroyNotify)g_value_unset);
+
+ for (i = 0; i < values->len; i++) {
+ GValue copy = { 0 };
+ const GValue *src;
+
+ src = &g_array_index (values, GValue, i);
+ g_value_init (©, G_VALUE_TYPE (src));
+ g_value_copy (src, ©);
+ g_array_append_val (filter->priv->values, copy);
+ }
+ }
+
return filter;
}
@@ -599,6 +620,8 @@ gom_filter_finalize (GObject *object)
g_value_unset(&priv->value);
}
+ g_clear_pointer (&priv->values, g_array_unref);
+
if (priv->subfilters != NULL)
g_queue_free_full(priv->subfilters, g_object_unref);
diff --git a/gom/gom-filter.h b/gom/gom-filter.h
index e76f763..699e970 100644
--- a/gom/gom-filter.h
+++ b/gom/gom-filter.h
@@ -73,7 +73,7 @@ gchar *gom_filter_get_sql (GomFilter *filter,
GHashTable *table_map);
GArray *gom_filter_get_values (GomFilter *filter);
GomFilter *gom_filter_new_sql (const gchar *sql,
- GArray *values);
+ const GArray *values);
GomFilter *gom_filter_new_or (GomFilter *left,
GomFilter *right);
GomFilter *gom_filter_new_or_full (GomFilter *first,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]