* lib/hashkey-string.h: New file.
* lib/hashkey-string.c: New file, based on lib/clean-temp-simple.c.
* modules/hashkey-string: New file.
* lib/clean-temp-simple.c: Include hashkey-string.h. Don't include
<limits.h>.
(clean_temp_string_equals, clean_temp_string_hash): Remove functions.
(SIZE_BITS): Remove macro.
(register_temporary_file): Use hashkey_string_equals and
hashkey_string_hash.
* modules/clean-temp-simple (Depends-on): Add hashkey-string.
+2025-04-29 Bruno Haible <bruno@clisp.org>
+
+ New module hashkey-string.
+ * lib/hashkey-string.h: New file.
+ * lib/hashkey-string.c: New file, based on lib/clean-temp-simple.c.
+ * modules/hashkey-string: New file.
+ * lib/clean-temp-simple.c: Include hashkey-string.h. Don't include
+ <limits.h>.
+ (clean_temp_string_equals, clean_temp_string_hash): Remove functions.
+ (SIZE_BITS): Remove macro.
+ (register_temporary_file): Use hashkey_string_equals and
+ hashkey_string_hash.
+ * modules/clean-temp-simple (Depends-on): Add hashkey-string.
+
2025-04-29 Bruno Haible <bruno@clisp.org>
Rename include file hash-triple.h to hashcode-file.h.
#include "clean-temp-private.h"
#include <errno.h>
-#include <limits.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>
#include "thread-optim.h"
#include "gl_list.h"
#include "gl_linkedhash_list.h"
+#include "hashkey-string.h"
#include "gettext.h"
#define _(msgid) dgettext ("gnulib", msgid)
asynchronous signal.
*/
-/* String equality and hash code functions used by the lists. */
-
-bool
-clean_temp_string_equals (const void *x1, const void *x2)
-{
- const char *s1 = (const char *) x1;
- const char *s2 = (const char *) x2;
- return strcmp (s1, s2) == 0;
-}
-
-#define SIZE_BITS (sizeof (size_t) * CHAR_BIT)
-
-/* A hash function for NUL-terminated char* strings using
- the method described by Bruno Haible.
- See https://www.haible.de/bruno/hashfunc.html. */
-size_t
-clean_temp_string_hash (const void *x)
-{
- const char *s = (const char *) x;
- size_t h = 0;
-
- for (; *s; s++)
- h = *s + ((h << 9) | (h >> (SIZE_BITS - 9)));
-
- return h;
-}
-
/* The set of fatal signal handlers.
Cached here because we are not allowed to call get_fatal_signal_set ()
}
file_cleanup_list =
gl_list_nx_create_empty (GL_LINKEDHASH_LIST,
- clean_temp_string_equals,
- clean_temp_string_hash,
+ hashkey_string_equals,
+ hashkey_string_hash,
NULL, false);
if (file_cleanup_list == NULL)
{
--- /dev/null
+/* Support for using a string as a hash key.
+ Copyright (C) 2006-2025 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include "hashkey-string.h"
+
+#include <limits.h>
+#include <string.h>
+
+bool
+hashkey_string_equals (const void *x1, const void *x2)
+{
+ const char *s1 = (const char *) x1;
+ const char *s2 = (const char *) x2;
+ return strcmp (s1, s2) == 0;
+}
+
+#define SIZE_BITS (sizeof (size_t) * CHAR_BIT)
+
+/* A hash function for NUL-terminated 'const char *' strings using
+ the method described by Bruno Haible.
+ See https://www.haible.de/bruno/hashfunc.html. */
+size_t
+hashkey_string_hash (const void *x)
+{
+ const char *s = (const char *) x;
+ size_t h = 0;
+
+ for (; *s; s++)
+ h = *s + ((h << 9) | (h >> (SIZE_BITS - 9)));
+
+ return h;
+}
--- /dev/null
+/* Support for using a string as a hash key.
+ Copyright (C) 2006-2025 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef _GL_HASHKEY_STRING_H
+#define _GL_HASHKEY_STRING_H
+
+#include <stddef.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* String equality and hash code functions that operate on plain C strings
+ ('const char *'). */
+extern bool hashkey_string_equals (const void *x1, const void *x2);
+extern size_t hashkey_string_hash (const void *x);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _GL_HASHKEY_STRING_H */
fatal-signal
rmdir
linkedhash-list
+hashkey-string
gettext-h
gnulib-i18n
--- /dev/null
+Description:
+Support for using a string as a hash key in the hash-set and hash-map modules.
+
+Files:
+lib/hashkey-string.h
+lib/hashkey-string.c
+
+Depends-on:
+bool
+
+configure.ac:
+
+Makefile.am:
+lib_SOURCES += hashkey-string.h hashkey-string.c
+
+Include:
+"hashkey-string.h"
+
+License:
+LGPLv2+
+
+Maintainer:
+all