Bug #262 » 0001-hash_insert-check-if-key-isn-t-already-here-before.patch
| src/util.c | ||
|---|---|---|
|
struct hash_item *it;
|
||
|
assert(hash && key);
|
||
|
if (hash_get(hash, key))
|
||
|
if (hash_has_key(hash, key))
|
||
|
fatal("Element with key %s already in hash %x\n", key, hash);
|
||
|
it = bip_malloc(sizeof(struct hash_item));
|
||
| ... | ... | |
|
return hi->item;
|
||
|
}
|
||
|
int hash_has_key(hash_t *hash, const char *key)
|
||
|
{
|
||
|
hash_iterator_t hi;
|
||
|
struct hash_item *it;
|
||
|
for (hash_it_init(hash, &hi); hash_it_key(&hi); hash_it_next(&hi)) {
|
||
|
it = list_it_item(&hi.lit);
|
||
|
if (hi.lit.list->cmp(it, key) == 0)
|
||
|
return 1;
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
void *hash_remove_if_exists(hash_t *hash, const char *key)
|
||
|
{
|
||
|
assert(hash && key);
|
||
| src/util.h | ||
|---|---|---|
|
void *hash_it_remove(hash_iterator_t *li);
|
||
|
list_t *hash_keys(hash_t *hash);
|
||
|
void hash_rename_key(hash_t *h, const char *oldk, const char *newk);
|
||
|
int hash_has_key(hash_t *hash, const char *key);
|
||
|
int is_valid_nick(char *str);
|
||
|
int is_valid_username(char *str);
|
||