From 7bed7ea77dfd2634d3fceaafaacd9764bf76e709 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Thu, 16 Aug 2018 15:36:10 +0100 Subject: Add missing introspection annotations to gvdb_table_get_names() Signed-off-by: Philip Withnall --- gvdb-reader.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gvdb-reader.c b/gvdb-reader.c index aa3154f..c2ee84d 100644 --- a/gvdb-reader.c +++ b/gvdb-reader.c @@ -332,7 +332,7 @@ gvdb_table_list_from_item (GvdbTable *table, /** * gvdb_table_get_names: * @table: a #GvdbTable - * @length: the number of items returned, or %NULL + * @length: (optional): the number of items returned, or %NULL * * Gets a list of all names contained in @table. * @@ -344,7 +344,7 @@ gvdb_table_list_from_item (GvdbTable *table, * above calls in the case of the corrupted file. Note also that the * returned strings may not be utf8. * - * Returns: a %NULL-terminated list of strings, of length @length + * Returns: (array length=length): a %NULL-terminated list of strings, of length @length **/ gchar ** gvdb_table_get_names (GvdbTable *table, -- cgit v1.2.1 From a44329c2442ff45d31fe7a0ca45005f145df3187 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Thu, 16 Aug 2018 15:36:32 +0100 Subject: Fix type of length returned by gvdb_table_get_names() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It should not be unsigned. The type in the on-disk format is gint32, so we need to return something at least as wide as that. However, we should not expose the implementation detail that the on-disk format is specifically gint32. Use a gsize, since that’s the normal type for array lengths — but check that we’re not on a platform where (somehow) gsize is smaller than gint32. Signed-off-by: Philip Withnall --- gvdb-reader.c | 7 +++++-- gvdb-reader.h | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/gvdb-reader.c b/gvdb-reader.c index c2ee84d..ae349a6 100644 --- a/gvdb-reader.c +++ b/gvdb-reader.c @@ -348,7 +348,7 @@ gvdb_table_list_from_item (GvdbTable *table, **/ gchar ** gvdb_table_get_names (GvdbTable *table, - gint *length) + gsize *length) { gchar **names; gint n_names; @@ -474,7 +474,10 @@ gvdb_table_get_names (GvdbTable *table, } if (length) - *length = n_names; + { + G_STATIC_ASSERT (sizeof (*length) >= sizeof (n_names)); + *length = n_names; + } return names; } diff --git a/gvdb-reader.h b/gvdb-reader.h index 3982773..9bf627f 100644 --- a/gvdb-reader.h +++ b/gvdb-reader.h @@ -38,7 +38,7 @@ G_GNUC_INTERNAL void gvdb_table_free (GvdbTable *table); G_GNUC_INTERNAL gchar ** gvdb_table_get_names (GvdbTable *table, - gint *length); + gsize *length); G_GNUC_INTERNAL gchar ** gvdb_table_list (GvdbTable *table, const gchar *key); -- cgit v1.2.1 From 084e1d868081481cd5dcad5e721714e9037ecb52 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Thu, 16 Aug 2018 15:44:09 +0100 Subject: Preallocate a GPtrArray to avoid some reallocations later on Suggested by Georges Basile Stavracas Neto. Signed-off-by: Philip Withnall --- gvdb-reader.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gvdb-reader.c b/gvdb-reader.c index ae349a6..9509388 100644 --- a/gvdb-reader.c +++ b/gvdb-reader.c @@ -462,7 +462,7 @@ gvdb_table_get_names (GvdbTable *table, { GPtrArray *fixed_names; - fixed_names = g_ptr_array_new (); + fixed_names = g_ptr_array_sized_new (n_names); for (i = 0; i < n_names; i++) if (names[i] != NULL) g_ptr_array_add (fixed_names, names[i]); -- cgit v1.2.1