summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Withnall <withnall@endlessm.com>2018-08-16 15:36:32 +0100
committerPhilip Withnall <withnall@endlessm.com>2018-08-16 15:36:32 +0100
commita44329c2442ff45d31fe7a0ca45005f145df3187 (patch)
tree8c8f6479536b68fbd69502cffcf9d17a96cd9551
parent7bed7ea77dfd2634d3fceaafaacd9764bf76e709 (diff)
downloadgvdb-a44329c2442ff45d31fe7a0ca45005f145df3187.tar.gz
Fix type of length returned by gvdb_table_get_names()
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 <withnall@endlessm.com>
-rw-r--r--gvdb-reader.c7
-rw-r--r--gvdb-reader.h2
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);