Skip to content
Snippets Groups Projects
dap_chain_plugins_list.c 2.29 KiB
#include "dap_chain_plugins_list.h"

#undef LOG_TAG
#define LOG_TAG "dap_chain_plugins_list"

void dap_chain_plugins_list_init(){
    s_dap_chain_plugins_module_list = NULL;
}

void dap_chain_plugins_list_add(PyObject *a_module, const char *a_name){
    dap_chain_plugin_list_module_t *elemnet = (dap_chain_plugin_list_module_t*)DAP_NEW(dap_chain_plugin_list_module_t);
    elemnet->name = dap_strdup(a_name);
    elemnet->obj_module = a_module;
    LL_APPEND(s_dap_chain_plugins_module_list, elemnet);
}

dap_chain_plugin_list_module_t* dap_chain_plugins_list_get(){
    return s_dap_chain_plugins_module_list;
}

int dap_chain_plugins_list_cmp(dap_chain_plugin_list_module_t *e1, dap_chain_plugin_list_module_t *e2){
    return strcmp(e1->name, e2->name);
}

bool dap_chain_plugins_list_check_load_plugins(dap_chain_plugins_list_char_t *a_list){
    dap_chain_plugins_list_char_t *l_value_from_list = NULL;
    dap_chain_plugin_list_module_t *l_element_from_list_module;
    dap_chain_plugin_list_module_t *l_element_lnk = (dap_chain_plugin_list_module_t*)DAP_NEW(
                dap_chain_plugin_list_module_t);

    int lenght;
    LL_COUNT(s_dap_chain_plugins_module_list, l_element_from_list_module, lenght);
    if (lenght == 0)
        return false;
    LL_FOREACH(a_list, l_value_from_list){
        l_element_lnk->name = l_value_from_list->value;
        LL_SEARCH(s_dap_chain_plugins_module_list, l_element_from_list_module, l_element_lnk, dap_chain_plugins_list_cmp);
        if (!l_element_from_list_module)
            return false;
    }
    return true;
}

void dap_chain_plugins_list_name_del(const char *a_name){
    dap_chain_plugin_list_module_t *l_plugin;
    dap_chain_plugin_list_module_t *l_tmp;
    bool plugin_searcging = false;
    LL_FOREACH_SAFE(s_dap_chain_plugins_module_list, l_plugin, l_tmp){
        if (strcmp(l_plugin->name, a_name) == 0){
            DAP_FREE(l_plugin->name);
            Py_XDECREF(l_plugin->obj_module);
            LL_DELETE(s_dap_chain_plugins_module_list, l_plugin);
            plugin_searcging = true;
        }
    }
    if (!plugin_searcging){
        log_it(L_WARNING, "Can't searching plugins %s for delete", a_name);
    }
}

int dap_chain_plugins_list_name_cmp(dap_chain_plugin_list_module_t *a_element, const char *a_name){
    return strcmp(a_element->name, a_name);
}