diff options
Diffstat (limited to 'tools/gnulib/patches/647-hashkey-string.patch')
-rw-r--r-- | tools/gnulib/patches/647-hashkey-string.patch | 215 |
1 files changed, 215 insertions, 0 deletions
diff --git a/tools/gnulib/patches/647-hashkey-string.patch b/tools/gnulib/patches/647-hashkey-string.patch new file mode 100644 index 0000000000..d0cd0a6311 --- /dev/null +++ b/tools/gnulib/patches/647-hashkey-string.patch @@ -0,0 +1,215 @@ +From 52738dcd0f522b16653cc8b21adfcb758702f2ab Mon Sep 17 00:00:00 2001 +From: Bruno Haible <bruno@clisp.org> +Date: Wed, 30 Apr 2025 01:20:17 +0200 +Subject: [PATCH] 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. +--- + ChangeLog | 14 ++++++++++++ + lib/clean-temp-simple.c | 33 +++------------------------ + lib/hashkey-string.c | 48 +++++++++++++++++++++++++++++++++++++++ + lib/hashkey-string.h | 35 ++++++++++++++++++++++++++++ + modules/clean-temp-simple | 1 + + modules/hashkey-string | 23 +++++++++++++++++++ + 6 files changed, 124 insertions(+), 30 deletions(-) + create mode 100644 lib/hashkey-string.c + create mode 100644 lib/hashkey-string.h + create mode 100644 modules/hashkey-string + +--- a/lib/clean-temp-simple.c ++++ b/lib/clean-temp-simple.c +@@ -22,7 +22,6 @@ + #include "clean-temp-private.h" + + #include <errno.h> +-#include <limits.h> + #include <signal.h> + #include <stdlib.h> + #include <string.h> +@@ -36,6 +35,7 @@ + #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) +@@ -106,33 +106,6 @@ gl_list_t /* <closeable_fd *> */ volatil + 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 () +@@ -326,8 +299,8 @@ register_temporary_file (const char *abs + } + 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 ++++ b/lib/hashkey-string.c +@@ -0,0 +1,48 @@ ++/* 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 ++++ b/lib/hashkey-string.h +@@ -0,0 +1,35 @@ ++/* 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 */ +--- a/modules/clean-temp-simple ++++ b/modules/clean-temp-simple +@@ -19,6 +19,7 @@ error + fatal-signal + rmdir + linkedhash-list ++hashkey-string + gettext-h + gnulib-i18n + +--- /dev/null ++++ b/modules/hashkey-string +@@ -0,0 +1,23 @@ ++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 |