From: Akim Demaille <akim.demaille@gmail.com>
To: Jim Meyering <jim@meyering.net>
Cc: Gnulib bugs <bug-gnulib@gnu.org>
Subject: hash: provide hash_xinitialize
Date: Mon, 9 Sep 2019 08:37:40 +0200 [thread overview]
Message-ID: <E571D19A-9FA6-45AF-9F25-A06D0177777A@gmail.com> (raw)
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:
next reply other threads:[~2019-09-09 6:37 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-09 6:37 Akim Demaille [this message]
2019-09-09 14:05 ` hash: provide hash_xinitialize Bruno Haible
2019-09-09 18:07 ` Akim Demaille
2019-09-09 19:15 ` Bruno Haible
2019-09-09 20:27 ` Jim Meyering
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://lists.gnu.org/mailman/listinfo/bug-gnulib
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=E571D19A-9FA6-45AF-9F25-A06D0177777A@gmail.com \
--to=akim.demaille@gmail.com \
--cc=bug-gnulib@gnu.org \
--cc=jim@meyering.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).