Skip to content
Snippets Groups Projects
Commit fe40f4f4 authored by alexey.stratulat's avatar alexey.stratulat
Browse files

[*] Fix. The list of loaded plugins now also uses utlist instead of...

[*] 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.
parent b3a9cdb8
No related branches found
No related tags found
1 merge request!27Support update sdk and merge plugins repo
...@@ -3,9 +3,11 @@ ...@@ -3,9 +3,11 @@
#include "Python.h" #include "Python.h"
#include "stdbool.h" #include "stdbool.h"
#include "dap_list.h" //#include "dap_list.h"
#include "dap_common.h" #include "dap_common.h"
#include "dap_strfuncs.h" #include "dap_strfuncs.h"
#include "utlist.h"
#include "dap_chain_plugins_manifest.h"
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
...@@ -14,34 +16,24 @@ extern "C" { ...@@ -14,34 +16,24 @@ extern "C" {
#undef LOG_TAG #undef LOG_TAG
#define LOG_TAG "dap_chain_plugins_list" #define LOG_TAG "dap_chain_plugins_list"
typedef struct dap_chain_plugin_module{ typedef struct dap_chain_list_plugin_module{
char *name; char *name;
PyObject *obj_module; PyObject *obj_module;
bool isFuncOnChainsUpdated; bool isFuncOnChainsUpdated;
bool isFuncOnGdbUpdated; bool isFuncOnGdbUpdated;
bool isFuncOnNetStatusChanged; 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_init();
void dap_chain_plugins_list_deint();
void dap_chain_plugins_list_add(PyObject *module, const char *name); dap_chain_plugin_list_module_t* dap_chain_plugins_list_get();
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);
bool dap_chai_plugins_list_module_check_on_chains_updated(unsigned int id); bool dap_chain_plugins_list_check_load_plugins(dap_chain_plugins_list_char_t *list);
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);
void dap_chain_plugins_list_add(PyObject *module, const char *name);
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
......
#include "dap_chain_plugins_list.h" #include "dap_chain_plugins_list.h"
int dap_chain_plugins_list_init(){ void dap_chain_plugins_list_init(){
dap_chain_plugins_module_list = dap_list_alloc(); m_dap_chain_plugins_module_list = NULL;
}
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_add(PyObject *module, const char *name){ 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)); dap_chain_plugin_list_module_t *elemnet = (dap_chain_plugin_list_module_t*)DAP_NEW(dap_chain_plugin_list_module_t);
module_s->name = dap_strdup(name); elemnet->name = dap_strdup(name);
module_s->obj_module = module; elemnet->obj_module = module;
module_s->isFuncOnGdbUpdated = true; elemnet->isFuncOnGdbUpdated = true;
module_s->isFuncOnChainsUpdated = true; elemnet->isFuncOnChainsUpdated = true;
module_s->isFuncOnNetStatusChanged = true; elemnet->isFuncOnNetStatusChanged = true;
//Checking func //Checking function
PyObject *F_FuncOnGdbUpdated = PyObject_GetAttrString(module_s->obj_module, "onGdbUpdated"); PyObject *F_FuncOnGdbUpdated = PyObject_GetAttrString(elemnet->obj_module, "onGdbUpdated");
PyObject *F_FuncOnChainsUpdated = PyObject_GetAttrString(module_s->obj_module, "onChainsUpdated"); PyObject *F_FuncOnChainsUpdated = PyObject_GetAttrString(elemnet->obj_module, "onChainsUpdated");
PyObject *F_FuncOnNetStatusChanged = PyObject_GetAttrString(module_s->obj_module, "onNetStatusChanged"); PyObject *F_FuncOnNetStatusChanged = PyObject_GetAttrString(elemnet->obj_module, "onNetStatusChanged");
if (F_FuncOnGdbUpdated == NULL || !PyCallable_Check(F_FuncOnGdbUpdated)){ if (F_FuncOnGdbUpdated == NULL || !PyCallable_Check(F_FuncOnGdbUpdated)){
log_it(L_WARNING, "Plugin %s don't callable function onGdbUpdated", module_s->name); log_it(L_WARNING, "Plugin %s don't callable function onGdbUpdated", elemnet->name);
module_s->isFuncOnGdbUpdated = false; elemnet->isFuncOnGdbUpdated = false;
} }
if (F_FuncOnChainsUpdated == NULL || !PyCallable_Check(F_FuncOnChainsUpdated)){ if (F_FuncOnChainsUpdated == NULL || !PyCallable_Check(F_FuncOnChainsUpdated)){
log_it(L_WARNING, "Plugin %s don't callable function onChainsUpdated", module_s->name); log_it(L_WARNING, "Plugin %s don't callable function onChainsUpdated", elemnet->name);
module_s->isFuncOnChainsUpdated = false; elemnet->isFuncOnChainsUpdated = false;
} }
if (F_FuncOnNetStatusChanged == NULL || !PyCallable_Check(F_FuncOnNetStatusChanged)){ if (F_FuncOnNetStatusChanged == NULL || !PyCallable_Check(F_FuncOnNetStatusChanged)){
log_it(L_WARNING, "Plugin %s don't callable function onNetStatusChanged", module_s->name); log_it(L_WARNING, "Plugin %s don't callable function onNetStatusChanged", elemnet->name);
module_s->isFuncOnNetStatusChanged = false; elemnet->isFuncOnNetStatusChanged = false;
} }
//Added structur to list LL_APPEND(m_dap_chain_plugins_module_list, elemnet);
dap_list_append(dap_chain_plugins_module_list, module_s);
} }
unsigned int dap_chain_plugins_list_lenght(){ dap_chain_plugin_list_module_t* dap_chain_plugins_list_get(){
return dap_list_length(dap_chain_plugins_module_list); return m_dap_chain_plugins_module_list;
} }
dap_chain_plugins_module_t *dap_chain_plugins_list_get_module(unsigned int id){ int dap_chain_plugins_list_cmp(dap_chain_plugin_list_module_t *e1, dap_chain_plugin_list_module_t *e2){
if (dap_chain_plugins_list_lenght() < id) return strcmp(e1->name, e2->name);
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;
} }
bool dap_chai_plugins_list_module_check_on_chains_updated(unsigned int id){ bool dap_chain_plugins_list_check_load_plugins(dap_chain_plugins_list_char_t *list){
if (dap_chain_plugins_list_lenght() < id) dap_chain_plugins_list_char_t *value_from_list = NULL;
return NULL; dap_chain_plugin_list_module_t *element_from_list_module;
dap_chain_plugins_module_t *module = (dap_chain_plugins_module_t*)dap_list_nth_data( dap_chain_plugin_list_module_t *element_lnk = (dap_chain_plugin_list_module_t*)DAP_NEW(
dap_chain_plugins_module_list, id dap_chain_plugin_list_module_t);
);
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_module_del(dap_chain_plugins_module_t *module){ int lenght;
for (unsigned int i=0; i < dap_chain_plugins_list_lenght(); i++){ LL_COUNT(m_dap_chain_plugins_module_list, element_from_list_module, lenght);
if (((dap_chain_plugins_module_t*)dap_list_nth_data(dap_chain_plugins_module_list, i)) == module){ if (lenght == 0)
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)
return false; return false;
dap_chain_plugins_module_t *mod = (dap_chain_plugins_module_t*)dap_list_nth_data(dap_chain_plugins_module_list, id_module); LL_FOREACH(list, value_from_list){
Py_XDECREF(mod->obj_module); element_lnk->name = value_from_list->value;
free(mod->name); LL_SEARCH(m_dap_chain_plugins_module_list, element_from_list_module, element_lnk, dap_chain_plugins_list_cmp);
dap_list_remove(dap_chain_plugins_module_list, dap_list_nth_data(dap_chain_plugins_module_list, id_module)); if (!element_from_list_module)
return true; return false;
}
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;
}
} }
return false; return true;
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment