From fe40f4f4f45f9b2e269d1cd799352d9d25aa3508 Mon Sep 17 00:00:00 2001 From: "alexey.stratulat" <alexey.stratulat@demlabs.net> Date: Fri, 13 Mar 2020 16:41:43 +0700 Subject: [PATCH] [*] Fix. The list of loaded plugins now also uses utlist instead of dap_list_t. A function has been added to check if all plugins from the list are arguments, which is an argument to the function. --- include/dap_chain_plugins_list.h | 30 +++----- src/dap_chain_plugins_list.c | 126 ++++++++++--------------------- 2 files changed, 49 insertions(+), 107 deletions(-) diff --git a/include/dap_chain_plugins_list.h b/include/dap_chain_plugins_list.h index 7d5336a..0231547 100644 --- a/include/dap_chain_plugins_list.h +++ b/include/dap_chain_plugins_list.h @@ -3,9 +3,11 @@ #include "Python.h" #include "stdbool.h" -#include "dap_list.h" +//#include "dap_list.h" #include "dap_common.h" #include "dap_strfuncs.h" +#include "utlist.h" +#include "dap_chain_plugins_manifest.h" #ifdef __cplusplus extern "C" { @@ -14,34 +16,24 @@ extern "C" { #undef LOG_TAG #define LOG_TAG "dap_chain_plugins_list" -typedef struct dap_chain_plugin_module{ +typedef struct dap_chain_list_plugin_module{ char *name; PyObject *obj_module; bool isFuncOnChainsUpdated; bool isFuncOnGdbUpdated; bool isFuncOnNetStatusChanged; -}dap_chain_plugins_module_t; + struct dap_chain_list_plugin_module *next; +}dap_chain_plugin_list_module_t; -static dap_list_t* dap_chain_plugins_module_list; +static dap_chain_plugin_list_module_t* m_dap_chain_plugins_module_list; -int dap_chain_plugins_list_init(); -void dap_chain_plugins_list_deint(); +void dap_chain_plugins_list_init(); -void dap_chain_plugins_list_add(PyObject *module, const char *name); - -unsigned int dap_chain_plugins_list_lenght(); - -dap_chain_plugins_module_t *dap_chain_plugins_list_get_module(unsigned int id); -PyObject *dap_chain_plugins_list_get_object(unsigned int id); +dap_chain_plugin_list_module_t* dap_chain_plugins_list_get(); -bool dap_chai_plugins_list_module_check_on_chains_updated(unsigned int id); -bool dap_chai_plugins_list_module_check_on_gdb_updated(unsigned int id); -bool dap_chai_plugins_list_module_check_on_net_status_updated(unsigned int id); - -bool dap_chain_plugins_list_module_del(dap_chain_plugins_module_t *module); -bool dap_chain_plugins_list_id_del(unsigned int id_module); -bool dap_chain_plugins_list_name_del(const char *name_module); +bool dap_chain_plugins_list_check_load_plugins(dap_chain_plugins_list_char_t *list); +void dap_chain_plugins_list_add(PyObject *module, const char *name); #ifdef __cplusplus extern "C" { diff --git a/src/dap_chain_plugins_list.c b/src/dap_chain_plugins_list.c index 224a170..9529b01 100644 --- a/src/dap_chain_plugins_list.c +++ b/src/dap_chain_plugins_list.c @@ -1,109 +1,59 @@ #include "dap_chain_plugins_list.h" -int dap_chain_plugins_list_init(){ - dap_chain_plugins_module_list = dap_list_alloc(); -} -void dap_chain_plugins_list_deint(){ - unsigned int len = dap_chain_plugins_list_lenght(); - if (len > 0){ - for (unsigned int i=0; i < len; i++){ - dap_chain_plugins_list_id_del(i); - } - } - dap_list_free(dap_chain_plugins_module_list); +void dap_chain_plugins_list_init(){ + m_dap_chain_plugins_module_list = NULL; } void dap_chain_plugins_list_add(PyObject *module, const char *name){ - dap_chain_plugins_module_t *module_s = (dap_chain_plugins_module_t*)malloc(sizeof (dap_chain_plugins_module_t)); - module_s->name = dap_strdup(name); - module_s->obj_module = module; - module_s->isFuncOnGdbUpdated = true; - module_s->isFuncOnChainsUpdated = true; - module_s->isFuncOnNetStatusChanged = true; - //Checking func - PyObject *F_FuncOnGdbUpdated = PyObject_GetAttrString(module_s->obj_module, "onGdbUpdated"); - PyObject *F_FuncOnChainsUpdated = PyObject_GetAttrString(module_s->obj_module, "onChainsUpdated"); - PyObject *F_FuncOnNetStatusChanged = PyObject_GetAttrString(module_s->obj_module, "onNetStatusChanged"); + 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(name); + elemnet->obj_module = module; + elemnet->isFuncOnGdbUpdated = true; + elemnet->isFuncOnChainsUpdated = true; + elemnet->isFuncOnNetStatusChanged = true; + //Checking function + PyObject *F_FuncOnGdbUpdated = PyObject_GetAttrString(elemnet->obj_module, "onGdbUpdated"); + PyObject *F_FuncOnChainsUpdated = PyObject_GetAttrString(elemnet->obj_module, "onChainsUpdated"); + PyObject *F_FuncOnNetStatusChanged = PyObject_GetAttrString(elemnet->obj_module, "onNetStatusChanged"); if (F_FuncOnGdbUpdated == NULL || !PyCallable_Check(F_FuncOnGdbUpdated)){ - log_it(L_WARNING, "Plugin %s don't callable function onGdbUpdated", module_s->name); - module_s->isFuncOnGdbUpdated = false; + log_it(L_WARNING, "Plugin %s don't callable function onGdbUpdated", elemnet->name); + elemnet->isFuncOnGdbUpdated = false; } if (F_FuncOnChainsUpdated == NULL || !PyCallable_Check(F_FuncOnChainsUpdated)){ - log_it(L_WARNING, "Plugin %s don't callable function onChainsUpdated", module_s->name); - module_s->isFuncOnChainsUpdated = false; + log_it(L_WARNING, "Plugin %s don't callable function onChainsUpdated", elemnet->name); + elemnet->isFuncOnChainsUpdated = false; } if (F_FuncOnNetStatusChanged == NULL || !PyCallable_Check(F_FuncOnNetStatusChanged)){ - log_it(L_WARNING, "Plugin %s don't callable function onNetStatusChanged", module_s->name); - module_s->isFuncOnNetStatusChanged = false; + log_it(L_WARNING, "Plugin %s don't callable function onNetStatusChanged", elemnet->name); + elemnet->isFuncOnNetStatusChanged = false; } - //Added structur to list - dap_list_append(dap_chain_plugins_module_list, module_s); + LL_APPEND(m_dap_chain_plugins_module_list, elemnet); } -unsigned int dap_chain_plugins_list_lenght(){ - return dap_list_length(dap_chain_plugins_module_list); +dap_chain_plugin_list_module_t* dap_chain_plugins_list_get(){ + return m_dap_chain_plugins_module_list; } -dap_chain_plugins_module_t *dap_chain_plugins_list_get_module(unsigned int id){ - if (dap_chain_plugins_list_lenght() < id) - return NULL; - return (dap_chain_plugins_module_t*)dap_list_nth_data(dap_chain_plugins_module_list, id); -} -PyObject *dap_chain_plugins_list_get_object(unsigned int id){ - if (dap_chain_plugins_list_lenght() < id) - return NULL; - return (dap_chain_plugins_list_get_module(id))->obj_module; +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_chai_plugins_list_module_check_on_chains_updated(unsigned int id){ - if (dap_chain_plugins_list_lenght() < id) - return NULL; - dap_chain_plugins_module_t *module = (dap_chain_plugins_module_t*)dap_list_nth_data( - dap_chain_plugins_module_list, id - ); - return module->isFuncOnChainsUpdated; -} -bool dap_chai_plugins_list_module_check_on_gdb_updated(unsigned int id){ - if (dap_chain_plugins_list_lenght() < id) - return NULL; - dap_chain_plugins_module_t *module = (dap_chain_plugins_module_t*)dap_list_nth_data( - dap_chain_plugins_module_list, id - ); - return module->isFuncOnGdbUpdated; -} -bool dap_chai_plugins_list_module_check_on_net_status_updated(unsigned int id){ - if (dap_chain_plugins_list_lenght() < id) - return NULL; - dap_chain_plugins_module_t *module = (dap_chain_plugins_module_t*)dap_list_nth_data( - dap_chain_plugins_module_list, id - ); - return module->isFuncOnNetStatusChanged; -} +bool dap_chain_plugins_list_check_load_plugins(dap_chain_plugins_list_char_t *list){ + dap_chain_plugins_list_char_t *value_from_list = NULL; + dap_chain_plugin_list_module_t *element_from_list_module; + dap_chain_plugin_list_module_t *element_lnk = (dap_chain_plugin_list_module_t*)DAP_NEW( + dap_chain_plugin_list_module_t); -bool dap_chain_plugins_list_module_del(dap_chain_plugins_module_t *module){ - for (unsigned int i=0; i < dap_chain_plugins_list_lenght(); i++){ - if (((dap_chain_plugins_module_t*)dap_list_nth_data(dap_chain_plugins_module_list, i)) == module){ - dap_chain_plugins_list_id_del(i); - return true; - } - } - return false; -} -bool dap_chain_plugins_list_id_del(unsigned int id_module){ - if (dap_chain_plugins_list_lenght() < id_module) + int lenght; + LL_COUNT(m_dap_chain_plugins_module_list, element_from_list_module, lenght); + if (lenght == 0) return false; - dap_chain_plugins_module_t *mod = (dap_chain_plugins_module_t*)dap_list_nth_data(dap_chain_plugins_module_list, id_module); - Py_XDECREF(mod->obj_module); - free(mod->name); - dap_list_remove(dap_chain_plugins_module_list, dap_list_nth_data(dap_chain_plugins_module_list, id_module)); - return true; -} -bool dap_chain_plugins_list_name_del(const char *name_module){ - for (unsigned int i=0; i < dap_chain_plugins_list_lenght(); i++){ - if (strcmp(((dap_chain_plugins_module_t*)dap_list_nth_data(dap_chain_plugins_module_list, i))->name, name_module) == 0){ - dap_chain_plugins_list_id_del(i); - return true; - } + LL_FOREACH(list, value_from_list){ + element_lnk->name = value_from_list->value; + LL_SEARCH(m_dap_chain_plugins_module_list, element_from_list_module, element_lnk, dap_chain_plugins_list_cmp); + if (!element_from_list_module) + return false; } - return false; + return true; } + -- GitLab