diff options
-rw-r--r-- | include/ruby/st.h | 4 | ||||
-rw-r--r-- | st.c | 23 |
2 files changed, 22 insertions, 5 deletions
diff --git a/include/ruby/st.h b/include/ruby/st.h index 9b48d514a9..2ca43844aa 100644 --- a/include/ruby/st.h +++ b/include/ruby/st.h @@ -59,8 +59,8 @@ typedef char st_check_for_sizeof_st_index_t[SIZEOF_VOIDP == (int)sizeof(st_index #define SIZEOF_ST_INDEX_T SIZEOF_VOIDP struct st_hash_type { - int (*compare)(ANYARGS /*st_data_t, st_data_t*/); /* st_compare_func* */ - st_index_t (*hash)(ANYARGS /*st_data_t*/); /* st_hash_func* */ + int (*compare)(st_data_t, st_data_t); /* st_compare_func* */ + st_index_t (*hash)(st_data_t); /* st_hash_func* */ }; #define ST_INDEX_BITS (SIZEOF_ST_INDEX_T * CHAR_BIT) @@ -145,16 +145,17 @@ static const struct st_hash_type st_hashtype_num = { st_numhash, }; -/* extern int strcmp(const char *, const char *); */ +static int st_strcmp(st_data_t, st_data_t); static st_index_t strhash(st_data_t); static const struct st_hash_type type_strhash = { - strcmp, + st_strcmp, strhash, }; +static int st_locale_insensitive_strcasecmp_i(st_data_t lhs, st_data_t rhs); static st_index_t strcasehash(st_data_t); static const struct st_hash_type type_strcasehash = { - st_locale_insensitive_strcasecmp, + st_locale_insensitive_strcasecmp_i, strcasehash, }; @@ -2091,6 +2092,22 @@ st_locale_insensitive_strncasecmp(const char *s1, const char *s2, size_t n) return 0; } +static int +st_strcmp(st_data_t lhs, st_data_t rhs) +{ + const char *s1 = (char *)lhs; + const char *s2 = (char *)rhs; + return strcmp(s1, s2); +} + +static int +st_locale_insensitive_strcasecmp_i(st_data_t lhs, st_data_t rhs) +{ + const char *s1 = (char *)lhs; + const char *s2 = (char *)rhs; + return st_locale_insensitive_strcasecmp(s1, s2); +} + NO_SANITIZE("unsigned-integer-overflow", PUREFUNC(static st_index_t strcasehash(st_data_t))); static st_index_t strcasehash(st_data_t arg) |