return strlcpy(out, p, outlen);
}
-/** Multiply with modulo wrap
- *
- * Avoids multiplication overflow.
- *
- * @param[in] lhs First operand.
- * @param[in] rhs Second operand.
- * @param[in] mod Modulo.
- * @return
- * - Result.
- */
-uint64_t fr_multiply_mod(uint64_t lhs, uint64_t rhs, uint64_t mod)
-{
- uint64_t res = 0;
-
- lhs %= mod;
-
- while (rhs > 0) {
- if (rhs & 0x01) res = (res + lhs) % mod;
-
- lhs = (lhs * 2) % mod;
- rhs /= 2;
- }
-
- return res % mod;
-}
-
/** Compares two pointers
*
* @param a first pointer to compare.
ssize_t fr_utf8_to_ucs2(uint8_t *out, size_t outlen, char const *in, size_t inlen);
size_t fr_snprint_uint128(char *out, size_t outlen, uint128_t const num);
-uint64_t fr_multiply_mod(uint64_t lhs, uint64_t rhs, uint64_t mod);
-
int8_t fr_pointer_cmp(void const *a, void const *b);
void fr_quick_sort(void const *to_sort[], int min_idx, int max_idx, fr_cmp_t cmp);
int fr_digest_cmp(uint8_t const *a, uint8_t const *b, size_t length) CC_HINT(nonnull);
static unsigned int hash(char const * username, unsigned int tablesize)
{
- uint64_t h = 1;
+ uint32_t h = fr_hash_string(username);
- while (*username) h = fr_multiply_mod(h, (7907 + *username++), tablesize);
-
- return (unsigned int)h;
+ return h % tablesize;
}
static void release_hash_table(struct hashtable * ht){