bug-gnulib@gnu.org mirror (unofficial)
 help / color / mirror / Atom feed
* hash: provide hash_xinitialize
@ 2019-09-09  6:37 Akim Demaille
  2019-09-09 14:05 ` Bruno Haible
  0 siblings, 1 reply; 5+ messages in thread
From: Akim Demaille @ 2019-09-09  6:37 UTC (permalink / raw)
  To: Jim Meyering; +Cc: Gnulib bugs

Hi Jim,

Recently in Bison I had to check all my calls to hash_initialize for memory exhaustion.  Coreutils do it by hand for some of the calls, but we could just as well provide a simple wrapper?

commit 73f0aa2e58b1dabbe075ab6bf5644da36d7c72d2
Author: Akim Demaille <akim.demaille@gmail.com>
Date:   Mon Sep 9 08:31:33 2019 +0200

    hash: provide hash_xinitialize.
    
    Suggested by Egor Pugin <egor.pugin@gmail.com>
    https://lists.gnu.org/archive/html/bison-patches/2019-09/msg00026.html
    
    * modules/hash (Depends-on): Add xalloc.
    * lib/hash.h, lib/hash.c (hash_xinitialize): New.

diff --git a/ChangeLog b/ChangeLog
index 5c226ce43..ca12b170b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2019-09-09  Akim Demaille  <akim@lrde.epita.fr>
+
+	hash: provide hash_xinitialize.
+	Suggested by Egor Pugin <egor.pugin@gmail.com>
+	https://lists.gnu.org/archive/html/bison-patches/2019-09/msg00026.html
+	* modules/hash (Depends-on): Add xalloc.
+	* lib/hash.h, lib/hash.c (hash_xinitialize): New.
+
 2019-09-06  Akim Demaille  <akim@lrde.epita.fr>
 
 	bitset: style changes
diff --git a/lib/hash.c b/lib/hash.c
index 9e1f8e841..ca1d04044 100644
--- a/lib/hash.c
+++ b/lib/hash.c
@@ -27,6 +27,7 @@
 #include "hash.h"
 
 #include "bitrotate.h"
+#include "xalloc.h"
 #include "xalloc-oversized.h"
 
 #include <stdint.h>
@@ -645,6 +646,22 @@ hash_initialize (size_t candidate, const Hash_tuning *tuning,
   return NULL;
 }
 
+
+/* Same as hash_initialize, but invokes xalloc_die on memory
+   exhaustion.  */
+
+Hash_table *
+hash_xinitialize (size_t candidate, const Hash_tuning *tuning,
+                  Hash_hasher hasher, Hash_comparator comparator,
+                  Hash_data_freer data_freer)
+{
+  Hash_table *res =
+    hash_initialize (candidate, tuning, hasher, comparator, data_freer);
+  if (!res)
+    xalloc_die ();
+  return res;
+}
+
 /* Make all buckets empty, placing any chained entries on the free list.
    Apply the user-specified function data_freer (if any) to the datas of any
    affected entries.  */
diff --git a/lib/hash.h b/lib/hash.h
index a1a483a35..8f2e4591f 100644
--- a/lib/hash.h
+++ b/lib/hash.h
@@ -89,6 +89,9 @@ void hash_reset_tuning (Hash_tuning *);
 Hash_table *hash_initialize (size_t, const Hash_tuning *,
                              Hash_hasher, Hash_comparator,
                              Hash_data_freer) _GL_ATTRIBUTE_WUR;
+Hash_table *hash_xinitialize (size_t, const Hash_tuning *,
+                              Hash_hasher, Hash_comparator,
+                              Hash_data_freer) _GL_ATTRIBUTE_WUR;
 void hash_clear (Hash_table *);
 void hash_free (Hash_table *);
 
diff --git a/modules/hash b/modules/hash
index 42502e749..31303c1a8 100644
--- a/modules/hash
+++ b/modules/hash
@@ -9,6 +9,7 @@ Depends-on:
 bitrotate
 stdbool
 stdint
+xalloc
 xalloc-oversized
 
 configure.ac:



^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2019-09-09 20:28 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-09-09  6:37 hash: provide hash_xinitialize Akim Demaille
2019-09-09 14:05 ` Bruno Haible
2019-09-09 18:07   ` Akim Demaille
2019-09-09 19:15     ` Bruno Haible
2019-09-09 20:27       ` Jim Meyering

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).