core: Use macros to generate ao2_container callbacks where possible.

This uses AO2_STRING_FIELD_HASH_FN and AO2_STRING_FIELD_CMP_FN where
possible in the Asterisk core.

This removes CMP_STOP from the result of CMP_FN callbacks for the
following structure types:
* ast_bucket_metadata
* ast_bucket_scheme
* generic_monitor_instance_list (ccss.c)
* ast_bucket_file (media_cache.c)
* named_acl

Change-Id: Ide4c1449a894bce70dea1fef664dade9b57578f1
This commit is contained in:
Corey Farrell
2017-12-29 23:59:00 -05:00
parent 80e6b2eff5
commit bc73337e07
10 changed files with 54 additions and 668 deletions

View File

@@ -49,62 +49,6 @@
/*! Our one and only container holding media items */
static struct ao2_container *media_cache;
/*!
* \internal
* \brief Hashing function for file metadata
*/
static int media_cache_hash(const void *obj, const int flags)
{
const struct ast_bucket_file *object;
const char *key;
switch (flags & OBJ_SEARCH_MASK) {
case OBJ_SEARCH_KEY:
key = obj;
break;
case OBJ_SEARCH_OBJECT:
object = obj;
key = ast_sorcery_object_get_id(object);
break;
default:
/* Hash can only work on something with a full key */
ast_assert(0);
return 0;
}
return ast_str_hash(key);
}
/*!
* \internal
* \brief Comparison function for file metadata
*/
static int media_cache_cmp(void *obj, void *arg, int flags)
{
struct ast_bucket_file *left = obj;
struct ast_bucket_file *right = arg;
const char *right_key = arg;
int cmp;
switch (flags & OBJ_SEARCH_MASK) {
case OBJ_SEARCH_OBJECT:
right_key = ast_sorcery_object_get_id(right);
/* Fall through */
case OBJ_SEARCH_KEY:
cmp = strcmp(ast_sorcery_object_get_id(left), right_key);
break;
case OBJ_SEARCH_PARTIAL_KEY:
cmp = strncmp(ast_sorcery_object_get_id(left), right_key, strlen(right_key));
break;
default:
ast_assert(0);
cmp = 0;
break;
}
return cmp ? 0 : CMP_MATCH | CMP_STOP;
}
int ast_media_cache_exists(const char *uri)
{
struct ast_bucket_file *bucket_file;
@@ -712,7 +656,7 @@ int ast_media_cache_init(void)
ast_register_atexit(media_cache_shutdown);
media_cache = ao2_container_alloc_options(AO2_ALLOC_OPT_LOCK_MUTEX, AO2_BUCKETS,
media_cache_hash, media_cache_cmp);
ast_sorcery_object_id_hash, ast_sorcery_object_id_compare);
if (!media_cache) {
return -1;
}