mget_iri_t *blacklist_add(mget_iri_t *iri) { if (!iri) return NULL; if (mget_iri_supported(iri)) { mget_thread_mutex_lock(&mutex); if (!blacklist) { blacklist = mget_hashmap_create(128, -2, (unsigned int(*)(const void *))hash_iri, (int(*)(const void *, const void *))mget_iri_compare); mget_hashmap_set_destructor(blacklist, (void(*)(void *, void *))_free_entry); } if (!mget_hashmap_contains(blacklist, iri)) { // info_printf("Add to blacklist: %s\n",iri->uri); mget_hashmap_put_noalloc(blacklist, iri, NULL); // use hashmap as a hashset (without value) mget_thread_mutex_unlock(&mutex); return iri; } mget_thread_mutex_unlock(&mutex); } mget_iri_free(&iri); return NULL; }
mget_ocsp_db_t *mget_ocsp_db_init(mget_ocsp_db_t *ocsp_db) { if (!ocsp_db) ocsp_db = xmalloc(sizeof(mget_ocsp_db_t)); memset(ocsp_db, 0, sizeof(*ocsp_db)); ocsp_db->fingerprints = mget_hashmap_create(16, -2, (unsigned int(*)(const void *))_hash_ocsp, (int(*)(const void *, const void *))_compare_ocsp); mget_hashmap_set_key_destructor(ocsp_db->fingerprints, (void(*)(void *))mget_ocsp_free); mget_hashmap_set_value_destructor(ocsp_db->fingerprints, (void(*)(void *))mget_ocsp_free); ocsp_db->hosts = mget_hashmap_create(16, -2, (unsigned int(*)(const void *))_hash_ocsp, (int(*)(const void *, const void *))_compare_ocsp); mget_hashmap_set_key_destructor(ocsp_db->hosts, (void(*)(void *))mget_ocsp_free); mget_hashmap_set_value_destructor(ocsp_db->hosts, (void(*)(void *))mget_ocsp_free); mget_thread_mutex_init(&ocsp_db->mutex); return ocsp_db; }
mget_stringmap_t *mget_stringmap_create_nocase(int max) { return mget_hashmap_create(max, -2, (unsigned int (*)(const void *))hash_string_nocase, (int (*)(const void *, const void *))strcasecmp); }