blob: 36e99fec9ddf471811fb2ff1bb831e0be5117537 [file] [log] [blame]
/*
* Copyright (c) 2022 Laird Connectivity
* Copyright (c) 2022 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/kernel.h>
#include <string.h>
#include <zephyr/mgmt/mcumgr/grp/fs_mgmt/fs_mgmt_hash_checksum.h>
static sys_slist_t fs_mgmt_hash_checksum_group_list =
SYS_SLIST_STATIC_INIT(&fs_mgmt_hash_checksum_group_list);
void fs_mgmt_hash_checksum_unregister_group(struct fs_mgmt_hash_checksum_group *group)
{
(void)sys_slist_find_and_remove(&fs_mgmt_hash_checksum_group_list, &group->node);
}
void fs_mgmt_hash_checksum_register_group(struct fs_mgmt_hash_checksum_group *group)
{
sys_slist_append(&fs_mgmt_hash_checksum_group_list, &group->node);
}
const struct fs_mgmt_hash_checksum_group *fs_mgmt_hash_checksum_find_handler(const char *name)
{
/* Find the group with the specified group name */
struct fs_mgmt_hash_checksum_group *group = NULL;
sys_snode_t *snp, *sns;
SYS_SLIST_FOR_EACH_NODE_SAFE(&fs_mgmt_hash_checksum_group_list, snp, sns) {
struct fs_mgmt_hash_checksum_group *loop_group =
CONTAINER_OF(snp, struct fs_mgmt_hash_checksum_group, node);
if (strcmp(loop_group->group_name, name) == 0) {
group = loop_group;
break;
}
}
return group;
}
void fs_mgmt_hash_checksum_find_handlers(fs_mgmt_hash_checksum_list_cb cb, void *user_data)
{
/* Run a callback with all supported hash/checksums */
sys_snode_t *snp, *sns;
SYS_SLIST_FOR_EACH_NODE_SAFE(&fs_mgmt_hash_checksum_group_list, snp, sns) {
struct fs_mgmt_hash_checksum_group *group =
CONTAINER_OF(snp, struct fs_mgmt_hash_checksum_group, node);
cb(group, user_data);
}
}