struct st_hash_type now free from ANYARGS

After 5e86b005c0f2ef30df2f9906c7e2f3abefe286a2, I now think ANYARGS is
dangerous and should be extinct.  This commit adds function prototypes
for struct st_hash_type.  Honestly I don't understand why they were
commented out at the first place.
This commit is contained in:
卜部昌平 2019-08-27 12:21:36 +09:00
parent 6dd60cf114
commit 78628618da
2 changed files with 22 additions and 5 deletions

View File

@ -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 #define SIZEOF_ST_INDEX_T SIZEOF_VOIDP
struct st_hash_type { struct st_hash_type {
int (*compare)(ANYARGS /*st_data_t, st_data_t*/); /* st_compare_func* */ int (*compare)(st_data_t, st_data_t); /* st_compare_func* */
st_index_t (*hash)(ANYARGS /*st_data_t*/); /* st_hash_func* */ st_index_t (*hash)(st_data_t); /* st_hash_func* */
}; };
#define ST_INDEX_BITS (SIZEOF_ST_INDEX_T * CHAR_BIT) #define ST_INDEX_BITS (SIZEOF_ST_INDEX_T * CHAR_BIT)

23
st.c
View File

@ -145,16 +145,17 @@ static const struct st_hash_type st_hashtype_num = {
st_numhash, 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 st_index_t strhash(st_data_t);
static const struct st_hash_type type_strhash = { static const struct st_hash_type type_strhash = {
strcmp, st_strcmp,
strhash, 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 st_index_t strcasehash(st_data_t);
static const struct st_hash_type type_strcasehash = { static const struct st_hash_type type_strcasehash = {
st_locale_insensitive_strcasecmp, st_locale_insensitive_strcasecmp_i,
strcasehash, strcasehash,
}; };
@ -2091,6 +2092,22 @@ st_locale_insensitive_strncasecmp(const char *s1, const char *s2, size_t n)
return 0; 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))); NO_SANITIZE("unsigned-integer-overflow", PUREFUNC(static st_index_t strcasehash(st_data_t)));
static st_index_t static st_index_t
strcasehash(st_data_t arg) strcasehash(st_data_t arg)