From ecd01059a5fed6c84fb7ed45f8b4ee020dc294c9 Mon Sep 17 00:00:00 2001
From: Marko Lindqvist <cazfi74@gmail.com>
Date: Mon, 9 Sep 2024 18:45:39 +0300
Subject: [PATCH 27/27] genhash.c: Replace parameter checking fc_asserts with
 nonnull attributes

See RM #755

Signed-off-by: Marko Lindqvist <cazfi74@gmail.com>
---
 utility/genhash.c | 29 ++---------------------------
 utility/genhash.h | 33 ++++++++++++++++++++++-----------
 2 files changed, 24 insertions(+), 38 deletions(-)

diff --git a/utility/genhash.c b/utility/genhash.c
index e8d42494da..9db3524bd4 100644
--- a/utility/genhash.c
+++ b/utility/genhash.c
@@ -139,9 +139,6 @@ char *genhash_str_copy_func(const char *vkey)
 ****************************************************************************/
 void genhash_str_free_func(char *vkey)
 {
-#ifdef FREECIV_DEBUG
-  fc_assert_ret(vkey != nullptr);
-#endif
   free(vkey);
 }
 
@@ -292,8 +289,6 @@ struct genhash *genhash_new(genhash_val_fn_t key_val_func,
 ****************************************************************************/
 void genhash_destroy(struct genhash *pgenhash)
 {
-  fc_assert_ret(pgenhash != nullptr);
-
   pgenhash->no_shrink = TRUE;
   genhash_clear(pgenhash);
   free(pgenhash->buckets);
@@ -516,8 +511,6 @@ bool genhash_set_no_shrink(struct genhash *pgenhash, bool no_shrink)
 {
   bool old;
 
-  fc_assert_ret_val(pgenhash != nullptr, FALSE);
-
   old = pgenhash->no_shrink;
   pgenhash->no_shrink = no_shrink;
 
@@ -529,8 +522,6 @@ bool genhash_set_no_shrink(struct genhash *pgenhash, bool no_shrink)
 ****************************************************************************/
 size_t genhash_size(const struct genhash *pgenhash)
 {
-  fc_assert_ret_val(pgenhash != nullptr, 0);
-
   return pgenhash->num_entries;
 }
 
@@ -539,8 +530,6 @@ size_t genhash_size(const struct genhash *pgenhash)
 ****************************************************************************/
 size_t genhash_capacity(const struct genhash *pgenhash)
 {
-  fc_assert_ret_val(pgenhash != nullptr, 0);
-
   return pgenhash->num_buckets;
 }
 
@@ -554,8 +543,6 @@ struct genhash *genhash_copy(const struct genhash *pgenhash)
   const struct genhash_entry *src_iter;
   struct genhash_entry **dest_slot, **dest_bucket;
 
-  fc_assert_ret_val(pgenhash != nullptr, nullptr);
-
   new_genhash = fc_malloc(sizeof(*new_genhash));
 
   /* Copy fields. */
@@ -590,8 +577,6 @@ void genhash_clear(struct genhash *pgenhash)
 {
   struct genhash_entry **bucket, **end;
 
-  fc_assert_ret(pgenhash != nullptr);
-
   bucket = pgenhash->buckets;
   end = bucket + pgenhash->num_buckets;
   for (; bucket < end; bucket++) {
@@ -614,8 +599,6 @@ bool genhash_insert(struct genhash *pgenhash, const void *key,
   struct genhash_entry **slot;
   genhash_val_t hash_val;
 
-  fc_assert_ret_val(pgenhash != nullptr, FALSE);
-
   hash_val = genhash_val_calc(pgenhash, key);
   slot = genhash_slot_lookup(pgenhash, key, hash_val);
   if (*slot != nullptr) {
@@ -658,9 +641,6 @@ bool genhash_replace_full(struct genhash *pgenhash, const void *key,
   struct genhash_entry **slot;
   genhash_val_t hash_val;
 
-  fc_assert_action(pgenhash != nullptr,
-                   genhash_default_get(old_pkey, old_pdata); return FALSE);
-
   hash_val = genhash_val_calc(pgenhash, key);
   slot = genhash_slot_lookup(pgenhash, key, hash_val);
   if (*slot != nullptr) {
@@ -690,9 +670,6 @@ bool genhash_lookup(const struct genhash *pgenhash, const void *key,
 {
   struct genhash_entry **slot;
 
-  fc_assert_action(pgenhash != nullptr,
-                   genhash_default_get(nullptr, pdata); return FALSE);
-
   slot = genhash_slot_lookup(pgenhash, key, genhash_val_calc(pgenhash, key));
   if (*slot != nullptr) {
     genhash_slot_get(slot, nullptr, pdata);
@@ -723,16 +700,14 @@ bool genhash_remove_full(struct genhash *pgenhash, const void *key,
 {
   struct genhash_entry **slot;
 
-  fc_assert_action(pgenhash != nullptr,
-                   genhash_default_get(deleted_pkey, deleted_pdata);
-                   return FALSE);
-
   slot = genhash_slot_lookup(pgenhash, key, genhash_val_calc(pgenhash, key));
   if (*slot != nullptr) {
     genhash_slot_get(slot, deleted_pkey, deleted_pdata);
     genhash_slot_free(pgenhash, slot);
     genhash_maybe_shrink(pgenhash);
+
     fc_assert(0 < pgenhash->num_entries);
+
     pgenhash->num_entries--;
     return TRUE;
   } else {
diff --git a/utility/genhash.h b/utility/genhash.h
index 17597b283d..71b000ff39 100644
--- a/utility/genhash.h
+++ b/utility/genhash.h
@@ -44,7 +44,8 @@ genhash_val_t genhash_str_val_func(const char *vkey);
 bool genhash_str_comp_func(const char *vkey1, const char *vkey2);
 /* and malloc'ed strings: */
 char *genhash_str_copy_func(const char *vkey);
-void genhash_str_free_func(char *vkey);
+void genhash_str_free_func(char *vkey)
+  fc__attribute((nonnull (1)));
 
 
 /* General functions: */
@@ -71,30 +72,40 @@ genhash_new_nentries_full(genhash_val_fn_t key_val_func,
                           genhash_free_fn_t data_free_func,
                           size_t nentries)
 fc__warn_unused_result;
-void genhash_destroy(struct genhash *pgenhash);
+void genhash_destroy(struct genhash *pgenhash)
+  fc__attribute((nonnull (1)));
 
-bool genhash_set_no_shrink(struct genhash *pgenhash, bool no_shrink);
-size_t genhash_size(const struct genhash *pgenhash);
-size_t genhash_capacity(const struct genhash *pgenhash);
+bool genhash_set_no_shrink(struct genhash *pgenhash, bool no_shrink)
+  fc__attribute((nonnull (1)));
+size_t genhash_size(const struct genhash *pgenhash)
+  fc__attribute((nonnull (1)));
+size_t genhash_capacity(const struct genhash *pgenhash)
+  fc__attribute((nonnull (1)));
 
 struct genhash *genhash_copy(const struct genhash *pgenhash)
-                fc__warn_unused_result;
-void genhash_clear(struct genhash *pgenhash);
+  fc__attribute((nonnull (1)))
+  fc__warn_unused_result;
+void genhash_clear(struct genhash *pgenhash)
+  fc__attribute((nonnull (1)));
 
 bool genhash_insert(struct genhash *pgenhash, const void *key,
-                    const void *data);
+                    const void *data)
+  fc__attribute((nonnull (1)));
 bool genhash_replace(struct genhash *pgenhash, const void *key,
                      const void *data);
 bool genhash_replace_full(struct genhash *pgenhash, const void *key,
                           const void *data, void **old_pkey,
-                          void **old_pdata);
+                          void **old_pdata)
+  fc__attribute((nonnull (1)));
 
 bool genhash_lookup(const struct genhash *pgenhash, const void *key,
-                    void **pdata);
+                    void **pdata)
+  fc__attribute((nonnull (1)));
 
 bool genhash_remove(struct genhash *pgenhash, const void *key);
 bool genhash_remove_full(struct genhash *pgenhash, const void *key,
-                         void **deleted_pkey, void **deleted_pdata);
+                         void **deleted_pkey, void **deleted_pdata)
+  fc__attribute((nonnull (1)));
 
 bool genhashes_are_equal(const struct genhash *pgenhash1,
                          const struct genhash *pgenhash2);
-- 
2.45.2

