aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libucl/ucl_hash.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/libucl/ucl_hash.c')
-rw-r--r--contrib/libucl/ucl_hash.c236
1 files changed, 119 insertions, 117 deletions
diff --git a/contrib/libucl/ucl_hash.c b/contrib/libucl/ucl_hash.c
index a26c26f9f..eb2053ba1 100644
--- a/contrib/libucl/ucl_hash.c
+++ b/contrib/libucl/ucl_hash.c
@@ -45,7 +45,7 @@ struct ucl_hash_struct {
};
static uint64_t
-ucl_hash_seed (void)
+ucl_hash_seed(void)
{
static uint64_t seed;
if (seed == 0) {
@@ -53,41 +53,41 @@ ucl_hash_seed (void)
seed = UCL_RANDOM_FUNCTION;
#else
/* Not very random but can be useful for our purposes */
- seed = time (NULL);
+ seed = time(NULL);
#endif
}
return seed;
}
-extern const guchar lc_map[256];
+extern const unsigned char lc_map[256];
static inline uint32_t
-ucl_hash_func (const ucl_object_t *o)
+ucl_hash_func(const ucl_object_t *o)
{
- return (uint32_t)rspamd_cryptobox_fast_hash (o->key, o->keylen, 0xb9a1ef83c4561c95ULL);
+ return (uint32_t) rspamd_cryptobox_fast_hash(o->key, o->keylen, 0xb9a1ef83c4561c95ULL);
}
static inline int
-ucl_hash_equal (const ucl_object_t *k1, const ucl_object_t *k2)
+ucl_hash_equal(const ucl_object_t *k1, const ucl_object_t *k2)
{
if (k1->keylen == k2->keylen) {
- return memcmp (k1->key, k2->key, k1->keylen) == 0;
+ return memcmp(k1->key, k2->key, k1->keylen) == 0;
}
return 0;
}
-KHASH_INIT (ucl_hash_node, const ucl_object_t *, struct ucl_hash_elt *, 1,
- ucl_hash_func, ucl_hash_equal)
+KHASH_INIT(ucl_hash_node, const ucl_object_t *, struct ucl_hash_elt *, 1,
+ ucl_hash_func, ucl_hash_equal)
static inline uint32_t
-ucl_hash_caseless_func (const ucl_object_t *o)
+ucl_hash_caseless_func(const ucl_object_t *o)
{
unsigned len = o->keylen;
unsigned leftover = o->keylen % 4;
unsigned fp, i;
- const uint8_t* s = (const uint8_t*)o->key;
+ const uint8_t *s = (const uint8_t *) o->key;
union {
struct {
unsigned char c1, c2, c3, c4;
@@ -98,7 +98,7 @@ ucl_hash_caseless_func (const ucl_object_t *o)
rspamd_cryptobox_fast_hash_state_t hst;
fp = len - leftover;
- rspamd_cryptobox_fast_hash_init (&hst, h);
+ rspamd_cryptobox_fast_hash_init(&hst, h);
for (i = 0; i != fp; i += 4) {
u.c.c1 = s[i], u.c.c2 = s[i + 1], u.c.c3 = s[i + 2], u.c.c4 = s[i + 3];
@@ -106,58 +106,58 @@ ucl_hash_caseless_func (const ucl_object_t *o)
u.c.c2 = lc_map[u.c.c2];
u.c.c3 = lc_map[u.c.c3];
u.c.c4 = lc_map[u.c.c4];
- rspamd_cryptobox_fast_hash_update (&hst, &u, sizeof (u));
+ rspamd_cryptobox_fast_hash_update(&hst, &u, sizeof(u));
}
u.pp = 0;
switch (leftover) {
case 3:
- u.c.c3 = lc_map[(unsigned char)s[i++]];
+ u.c.c3 = lc_map[(unsigned char) s[i++]];
case 2:
/* fallthrough */
- u.c.c2 = lc_map[(unsigned char)s[i++]];
+ u.c.c2 = lc_map[(unsigned char) s[i++]];
case 1:
/* fallthrough */
- u.c.c1 = lc_map[(unsigned char)s[i]];
- rspamd_cryptobox_fast_hash_update (&hst, &u, sizeof (u));
+ u.c.c1 = lc_map[(unsigned char) s[i]];
+ rspamd_cryptobox_fast_hash_update(&hst, &u, sizeof(u));
break;
}
- return (uint32_t)rspamd_cryptobox_fast_hash_final (&hst);
+ return (uint32_t) rspamd_cryptobox_fast_hash_final(&hst);
}
static inline bool
-ucl_hash_caseless_equal (const ucl_object_t *k1, const ucl_object_t *k2)
+ucl_hash_caseless_equal(const ucl_object_t *k1, const ucl_object_t *k2)
{
if (k1->keylen == k2->keylen) {
- return rspamd_lc_cmp (k1->key, k2->key, k1->keylen) == 0;
+ return rspamd_lc_cmp(k1->key, k2->key, k1->keylen) == 0;
}
return false;
}
-KHASH_INIT (ucl_hash_caseless_node, const ucl_object_t *, struct ucl_hash_elt *, 1,
- ucl_hash_caseless_func, ucl_hash_caseless_equal)
+KHASH_INIT(ucl_hash_caseless_node, const ucl_object_t *, struct ucl_hash_elt *, 1,
+ ucl_hash_caseless_func, ucl_hash_caseless_equal)
-ucl_hash_t*
-ucl_hash_create (bool ignore_case)
+ucl_hash_t *
+ucl_hash_create(bool ignore_case)
{
ucl_hash_t *new;
- new = UCL_ALLOC (sizeof (ucl_hash_t));
+ new = UCL_ALLOC(sizeof(ucl_hash_t));
if (new != NULL) {
void *h;
new->head = NULL;
new->caseless = ignore_case;
if (ignore_case) {
- h = (void *)kh_init (ucl_hash_caseless_node);
+ h = (void *) kh_init(ucl_hash_caseless_node);
}
else {
- h = (void *)kh_init (ucl_hash_node);
+ h = (void *) kh_init(ucl_hash_node);
}
if (h == NULL) {
- UCL_FREE (sizeof (ucl_hash_t), new);
+ UCL_FREE(sizeof(ucl_hash_t), new);
return NULL;
}
new->hash = h;
@@ -165,7 +165,7 @@ ucl_hash_create (bool ignore_case)
return new;
}
-void ucl_hash_destroy (ucl_hash_t* hashlin, ucl_hash_free_func func)
+void ucl_hash_destroy(ucl_hash_t *hashlin, ucl_hash_free_func func)
{
if (hashlin == NULL) {
@@ -175,16 +175,16 @@ void ucl_hash_destroy (ucl_hash_t* hashlin, ucl_hash_free_func func)
if (func != NULL) {
/* Iterate over the hash first */
khash_t(ucl_hash_node) *h = (khash_t(ucl_hash_node) *)
- hashlin->hash;
+ hashlin->hash;
khiter_t k;
const ucl_object_t *cur, *tmp;
- for (k = kh_begin (h); k != kh_end (h); ++k) {
- if (kh_exist (h, k)) {
- cur = (kh_value (h, k))->obj;
+ for (k = kh_begin(h); k != kh_end(h); ++k) {
+ if (kh_exist(h, k)) {
+ cur = (kh_value(h, k))->obj;
while (cur != NULL) {
tmp = cur->next;
- func (__DECONST (ucl_object_t *, cur));
+ func(__DECONST(ucl_object_t *, cur));
cur = tmp;
}
}
@@ -193,27 +193,27 @@ void ucl_hash_destroy (ucl_hash_t* hashlin, ucl_hash_free_func func)
if (hashlin->caseless) {
khash_t(ucl_hash_caseless_node) *h = (khash_t(ucl_hash_caseless_node) *)
- hashlin->hash;
- kh_destroy (ucl_hash_caseless_node, h);
+ hashlin->hash;
+ kh_destroy(ucl_hash_caseless_node, h);
}
else {
khash_t(ucl_hash_node) *h = (khash_t(ucl_hash_node) *)
- hashlin->hash;
- kh_destroy (ucl_hash_node, h);
+ hashlin->hash;
+ kh_destroy(ucl_hash_node, h);
}
struct ucl_hash_elt *cur, *tmp;
- DL_FOREACH_SAFE(hashlin->head, cur, tmp) {
+ DL_FOREACH_SAFE(hashlin->head, cur, tmp)
+ {
UCL_FREE(sizeof(*cur), cur);
}
- UCL_FREE (sizeof (*hashlin), hashlin);
+ UCL_FREE(sizeof(*hashlin), hashlin);
}
-bool
-ucl_hash_insert (ucl_hash_t* hashlin, const ucl_object_t *obj,
- const char *key, unsigned keylen)
+bool ucl_hash_insert(ucl_hash_t *hashlin, const ucl_object_t *obj,
+ const char *key, unsigned keylen)
{
khiter_t k;
int ret;
@@ -225,11 +225,11 @@ ucl_hash_insert (ucl_hash_t* hashlin, const ucl_object_t *obj,
if (hashlin->caseless) {
khash_t(ucl_hash_caseless_node) *h = (khash_t(ucl_hash_caseless_node) *)
- hashlin->hash;
- k = kh_put (ucl_hash_caseless_node, h, obj, &ret);
+ hashlin->hash;
+ k = kh_put(ucl_hash_caseless_node, h, obj, &ret);
if (ret > 0) {
elt = UCL_ALLOC(sizeof(*elt));
- pelt = &kh_value (h, k);
+ pelt = &kh_value(h, k);
*pelt = elt;
DL_APPEND(hashlin->head, elt);
elt->obj = obj;
@@ -240,25 +240,26 @@ ucl_hash_insert (ucl_hash_t* hashlin, const ucl_object_t *obj,
}
else {
khash_t(ucl_hash_node) *h = (khash_t(ucl_hash_node) *)
- hashlin->hash;
- k = kh_put (ucl_hash_node, h, obj, &ret);
+ hashlin->hash;
+ k = kh_put(ucl_hash_node, h, obj, &ret);
if (ret > 0) {
elt = UCL_ALLOC(sizeof(*elt));
- pelt = &kh_value (h, k);
+ pelt = &kh_value(h, k);
*pelt = elt;
DL_APPEND(hashlin->head, elt);
elt->obj = obj;
- } else if (ret < 0) {
+ }
+ else if (ret < 0) {
goto e0;
}
}
return true;
- e0:
+e0:
return false;
}
-void ucl_hash_replace (ucl_hash_t* hashlin, const ucl_object_t *old,
- const ucl_object_t *new)
+void ucl_hash_replace(ucl_hash_t *hashlin, const ucl_object_t *old,
+ const ucl_object_t *new)
{
khiter_t k;
int ret;
@@ -270,12 +271,12 @@ void ucl_hash_replace (ucl_hash_t* hashlin, const ucl_object_t *old,
if (hashlin->caseless) {
khash_t(ucl_hash_caseless_node) *h = (khash_t(ucl_hash_caseless_node) *)
- hashlin->hash;
- k = kh_put (ucl_hash_caseless_node, h, old, &ret);
+ hashlin->hash;
+ k = kh_put(ucl_hash_caseless_node, h, old, &ret);
if (ret == 0) {
elt = kh_value(h, k);
- kh_del (ucl_hash_caseless_node, h, k);
- k = kh_put (ucl_hash_caseless_node, h, new, &ret);
+ kh_del(ucl_hash_caseless_node, h, k);
+ k = kh_put(ucl_hash_caseless_node, h, new, &ret);
nelt = UCL_ALLOC(sizeof(*nelt));
nelt->obj = new;
kh_value(h, k) = nelt;
@@ -285,12 +286,12 @@ void ucl_hash_replace (ucl_hash_t* hashlin, const ucl_object_t *old,
}
else {
khash_t(ucl_hash_node) *h = (khash_t(ucl_hash_node) *)
- hashlin->hash;
- k = kh_put (ucl_hash_node, h, old, &ret);
+ hashlin->hash;
+ k = kh_put(ucl_hash_node, h, old, &ret);
if (ret == 0) {
- elt = kh_value (h, k);
- kh_del (ucl_hash_node, h, k);
- k = kh_put (ucl_hash_node, h, new, &ret);
+ elt = kh_value(h, k);
+ kh_del(ucl_hash_node, h, k);
+ k = kh_put(ucl_hash_node, h, new, &ret);
nelt = UCL_ALLOC(sizeof(*nelt));
nelt->obj = new;
kh_value(h, k) = nelt;
@@ -304,12 +305,15 @@ struct ucl_hash_real_iter {
const struct ucl_hash_elt *cur;
};
-#define UHI_SETERR(ep, ern) {if (ep != NULL) *ep = (ern);}
+#define UHI_SETERR(ep, ern) \
+ { \
+ if (ep != NULL) *ep = (ern); \
+ }
-const void*
-ucl_hash_iterate2 (ucl_hash_t *hashlin, ucl_hash_iter_t *iter, int *ep)
+const void *
+ucl_hash_iterate2(ucl_hash_t *hashlin, ucl_hash_iter_t *iter, int *ep)
{
- struct ucl_hash_real_iter *it = (struct ucl_hash_real_iter *)(*iter);
+ struct ucl_hash_real_iter *it = (struct ucl_hash_real_iter *) (*iter);
const ucl_object_t *ret = NULL;
if (hashlin == NULL) {
@@ -318,7 +322,7 @@ ucl_hash_iterate2 (ucl_hash_t *hashlin, ucl_hash_iter_t *iter, int *ep)
}
if (it == NULL) {
- it = UCL_ALLOC (sizeof (*it));
+ it = UCL_ALLOC(sizeof(*it));
if (it == NULL) {
UHI_SETERR(ep, ENOMEM);
@@ -334,7 +338,7 @@ ucl_hash_iterate2 (ucl_hash_t *hashlin, ucl_hash_iter_t *iter, int *ep)
it->cur = it->cur->next;
}
else {
- UCL_FREE (sizeof (*it), it);
+ UCL_FREE(sizeof(*it), it);
*iter = NULL;
return NULL;
}
@@ -344,17 +348,16 @@ ucl_hash_iterate2 (ucl_hash_t *hashlin, ucl_hash_iter_t *iter, int *ep)
return ret;
}
-bool
-ucl_hash_iter_has_next (ucl_hash_t *hashlin, ucl_hash_iter_t iter)
+bool ucl_hash_iter_has_next(ucl_hash_t *hashlin, ucl_hash_iter_t iter)
{
- struct ucl_hash_real_iter *it = (struct ucl_hash_real_iter *)(iter);
+ struct ucl_hash_real_iter *it = (struct ucl_hash_real_iter *) (iter);
return it->cur != NULL;
}
-const ucl_object_t*
-ucl_hash_search (ucl_hash_t* hashlin, const char *key, unsigned keylen)
+const ucl_object_t *
+ucl_hash_search(ucl_hash_t *hashlin, const char *key, unsigned keylen)
{
khiter_t k;
const ucl_object_t *ret = NULL;
@@ -370,20 +373,20 @@ ucl_hash_search (ucl_hash_t* hashlin, const char *key, unsigned keylen)
if (hashlin->caseless) {
khash_t(ucl_hash_caseless_node) *h = (khash_t(ucl_hash_caseless_node) *)
- hashlin->hash;
+ hashlin->hash;
- k = kh_get (ucl_hash_caseless_node, h, &search);
- if (k != kh_end (h)) {
- elt = kh_value (h, k);
+ k = kh_get(ucl_hash_caseless_node, h, &search);
+ if (k != kh_end(h)) {
+ elt = kh_value(h, k);
ret = elt->obj;
}
}
else {
khash_t(ucl_hash_node) *h = (khash_t(ucl_hash_node) *)
- hashlin->hash;
- k = kh_get (ucl_hash_node, h, &search);
- if (k != kh_end (h)) {
- elt = kh_value (h, k);
+ hashlin->hash;
+ k = kh_get(ucl_hash_node, h, &search);
+ if (k != kh_end(h)) {
+ elt = kh_value(h, k);
ret = elt->obj;
}
}
@@ -391,8 +394,7 @@ ucl_hash_search (ucl_hash_t* hashlin, const char *key, unsigned keylen)
return ret;
}
-void
-ucl_hash_delete (ucl_hash_t* hashlin, const ucl_object_t *obj)
+void ucl_hash_delete(ucl_hash_t *hashlin, const ucl_object_t *obj)
{
khiter_t k;
struct ucl_hash_elt *elt;
@@ -403,46 +405,46 @@ ucl_hash_delete (ucl_hash_t* hashlin, const ucl_object_t *obj)
if (hashlin->caseless) {
khash_t(ucl_hash_caseless_node) *h = (khash_t(ucl_hash_caseless_node) *)
- hashlin->hash;
+ hashlin->hash;
- k = kh_get (ucl_hash_caseless_node, h, obj);
- if (k != kh_end (h)) {
- elt = kh_value (h, k);
+ k = kh_get(ucl_hash_caseless_node, h, obj);
+ if (k != kh_end(h)) {
+ elt = kh_value(h, k);
DL_DELETE(hashlin->head, elt);
- kh_del (ucl_hash_caseless_node, h, k);
+ kh_del(ucl_hash_caseless_node, h, k);
UCL_FREE(sizeof(*elt), elt);
}
}
else {
khash_t(ucl_hash_node) *h = (khash_t(ucl_hash_node) *)
- hashlin->hash;
- k = kh_get (ucl_hash_node, h, obj);
- if (k != kh_end (h)) {
- elt = kh_value (h, k);
+ hashlin->hash;
+ k = kh_get(ucl_hash_node, h, obj);
+ if (k != kh_end(h)) {
+ elt = kh_value(h, k);
DL_DELETE(hashlin->head, elt);
- kh_del (ucl_hash_node, h, k);
+ kh_del(ucl_hash_node, h, k);
UCL_FREE(sizeof(*elt), elt);
}
}
}
-bool
-ucl_hash_reserve (ucl_hash_t *hashlin, size_t sz)
+bool ucl_hash_reserve(ucl_hash_t *hashlin, size_t sz)
{
if (hashlin == NULL) {
return false;
}
- if (sz > kh_size((khash_t(ucl_hash_node) *)hashlin->hash)) {
+ if (sz > kh_size((khash_t(ucl_hash_node) *) hashlin->hash)) {
if (hashlin->caseless) {
khash_t(ucl_hash_caseless_node) *h = (khash_t(
- ucl_hash_caseless_node) *)
- hashlin->hash;
- kh_resize (ucl_hash_caseless_node, h, sz * 2);
- } else {
+ ucl_hash_caseless_node) *)
+ hashlin->hash;
+ kh_resize(ucl_hash_caseless_node, h, sz * 2);
+ }
+ else {
khash_t(ucl_hash_node) *h = (khash_t(ucl_hash_node) *)
- hashlin->hash;
- kh_resize (ucl_hash_node, h, sz * 2);
+ hashlin->hash;
+ kh_resize(ucl_hash_node, h, sz * 2);
}
}
@@ -450,33 +452,32 @@ ucl_hash_reserve (ucl_hash_t *hashlin, size_t sz)
}
static int
-ucl_hash_cmp_icase (const void *a, const void *b)
+ucl_hash_cmp_icase(const void *a, const void *b)
{
- const struct ucl_hash_elt *oa = (const struct ucl_hash_elt *)a,
- *ob = (const struct ucl_hash_elt *)b;
+ const struct ucl_hash_elt *oa = (const struct ucl_hash_elt *) a,
+ *ob = (const struct ucl_hash_elt *) b;
if (oa->obj->keylen == ob->obj->keylen) {
- return rspamd_lc_cmp (oa->obj->key, ob->obj->key, oa->obj->keylen);
+ return rspamd_lc_cmp(oa->obj->key, ob->obj->key, oa->obj->keylen);
}
- return ((int)(oa->obj->keylen)) - ob->obj->keylen;
+ return ((int) (oa->obj->keylen)) - ob->obj->keylen;
}
static int
-ucl_hash_cmp_case_sens (const void *a, const void *b)
+ucl_hash_cmp_case_sens(const void *a, const void *b)
{
- const struct ucl_hash_elt *oa = (const struct ucl_hash_elt *)a,
- *ob = (const struct ucl_hash_elt *)b;
+ const struct ucl_hash_elt *oa = (const struct ucl_hash_elt *) a,
+ *ob = (const struct ucl_hash_elt *) b;
if (oa->obj->keylen == ob->obj->keylen) {
- return memcmp (oa->obj->key, ob->obj->key, oa->obj->keylen);
+ return memcmp(oa->obj->key, ob->obj->key, oa->obj->keylen);
}
- return ((int)(oa->obj->keylen)) - ob->obj->keylen;
+ return ((int) (oa->obj->keylen)) - ob->obj->keylen;
}
-void
-ucl_hash_sort (ucl_hash_t *hashlin, enum ucl_object_keys_sort_flags fl)
+void ucl_hash_sort(ucl_hash_t *hashlin, enum ucl_object_keys_sort_flags fl)
{
if (fl & UCL_SORT_KEYS_ICASE) {
@@ -489,9 +490,10 @@ ucl_hash_sort (ucl_hash_t *hashlin, enum ucl_object_keys_sort_flags fl)
if (fl & UCL_SORT_KEYS_RECURSIVE) {
struct ucl_hash_elt *elt;
- DL_FOREACH(hashlin->head, elt) {
- if (ucl_object_type (elt->obj) == UCL_OBJECT) {
- ucl_hash_sort (elt->obj->value.ov, fl);
+ DL_FOREACH(hashlin->head, elt)
+ {
+ if (ucl_object_type(elt->obj) == UCL_OBJECT) {
+ ucl_hash_sort(elt->obj->value.ov, fl);
}
}
}