mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-03 03:20:57 +00:00
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:
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user