[glib: 2/11] Fix type of length returned by gvdb_table_get_names()



commit a44329c2442ff45d31fe7a0ca45005f145df3187
Author: Philip Withnall <withnall endlessm com>
Date:   Thu Aug 16 15:36:32 2018 +0100

    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>

 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 c2ee84d2b..ae349a62c 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 39827737d..9bf627f4b 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);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]