From 9085029da5b3667ee33d3a60f5ae1c9a24a9b012 Mon Sep 17 00:00:00 2001 From: "alexey.stratulat" <alexey.stratulat@demlabs.net> Date: Thu, 23 Apr 2020 17:47:58 +0700 Subject: [PATCH] [+] Added functionality, deleting data from the list. --- include/dap_chain_plugins_list.h | 1 + include/dap_chain_plugins_manifest.h | 10 +++++ src/dap_chain_plugins_list.c | 4 ++ src/dap_chain_plugins_manifest.c | 67 ++++++++++++++++++++++++++++ 4 files changed, 82 insertions(+) diff --git a/include/dap_chain_plugins_list.h b/include/dap_chain_plugins_list.h index 7eec9695..ad31b73f 100644 --- a/include/dap_chain_plugins_list.h +++ b/include/dap_chain_plugins_list.h @@ -32,6 +32,7 @@ bool dap_chain_plugins_list_check_load_plugins(dap_chain_plugins_list_char_t *li void dap_chain_plugins_list_add(PyObject *module, const char *name); void dap_chain_plugins_list_name_del(const char *name); +int dap_chain_plugins_list_name_cmp(dap_chain_plugin_list_module_t *element, const char *name); #ifdef __cplusplus extern "C" { diff --git a/include/dap_chain_plugins_manifest.h b/include/dap_chain_plugins_manifest.h index 107a6c21..4072c28e 100644 --- a/include/dap_chain_plugins_manifest.h +++ b/include/dap_chain_plugins_manifest.h @@ -19,6 +19,8 @@ typedef struct dap_chain_plugins_list_char{ struct dap_chain_plugins_list_char *next; }dap_chain_plugins_list_char_t; +void dap_chain_plugins_list_char_delete_all(dap_chain_plugins_list_char_t *list); + typedef struct dap_list_manifest{ char *name; char *version; @@ -30,17 +32,25 @@ typedef struct dap_list_manifest{ dap_chain_plugins_list_manifest_t* manifests; +int dap_chain_plugins_manifest_name_cmp(dap_chain_plugins_list_manifest_t *man, const char *name); + dap_chain_plugins_list_manifest_t *dap_chain_plugins_manifest_new(const char *name, const char *version, const dap_chain_plugins_list_char_t *dep, const char *author, const char *description); void dap_chain_plugins_manifest_list_create(); dap_chain_plugins_list_manifest_t* dap_chain_plugins_manifests_get_list(); +dap_chain_plugins_list_manifest_t *dap_chain_plugins_manifest_list_get_name(const char *name); + +char* dap_chain_plugins_manifests_get_list_dependencyes(dap_chain_plugins_list_manifest_t *element); dap_chain_plugins_list_manifest_t* dap_chain_plugins_add_manifest_from_file(const char *file_path); bool dap_chain_plugins_manifest_list_add_from_file(const char *path_file); +bool dap_chain_plugins_manifest_list_delete_name(const char *name); +void dap_chain_plugins_manifest_list_delete_all(void); + #ifdef __cplusplus } #endif diff --git a/src/dap_chain_plugins_list.c b/src/dap_chain_plugins_list.c index cac4d703..3593a804 100644 --- a/src/dap_chain_plugins_list.c +++ b/src/dap_chain_plugins_list.c @@ -55,3 +55,7 @@ void dap_chain_plugins_list_name_del(const char *name){ } } +int dap_chain_plugins_list_name_cmp(dap_chain_plugin_list_module_t *element, const char *name){ + return strcmp(element->name, name); +} + diff --git a/src/dap_chain_plugins_manifest.c b/src/dap_chain_plugins_manifest.c index 4a202f98..840b9ac0 100644 --- a/src/dap_chain_plugins_manifest.c +++ b/src/dap_chain_plugins_manifest.c @@ -1,5 +1,14 @@ #include "dap_chain_plugins_manifest.h" +void dap_chain_plugins_list_char_delete_all(dap_chain_plugins_list_char_t *list){ + dap_chain_plugins_list_char_t *element; + dap_chain_plugins_list_char_t *tmp; + LL_FOREACH_SAFE(list, element, tmp){ + DAP_FREE(element->value); + LL_DELETE(list, element); + } +} + dap_chain_plugins_list_manifest_t *dap_chain_plugins_manifest_new(const char *name, const char *version, const dap_chain_plugins_list_char_t *dep, const char *author, const char *description){ dap_chain_plugins_list_manifest_t *man = (dap_chain_plugins_list_manifest_t*)DAP_NEW(dap_chain_plugins_list_manifest_t); @@ -34,6 +43,10 @@ void dap_chain_plugins_manifest_list_create(){ manifests = NULL; } +int dap_chain_plugins_manifest_name_cmp(dap_chain_plugins_list_manifest_t *man, const char *name){ + return dap_strcmp(man->name, name); +} + dap_chain_plugins_list_manifest_t* dap_chain_plugins_add_manifest_from_file(const char *file_path){ //READ File in char log_it(L_INFO, "Parse json file"); @@ -75,6 +88,33 @@ dap_chain_plugins_list_manifest_t* dap_chain_plugins_manifests_get_list(){ return manifests; } +dap_chain_plugins_list_manifest_t *dap_chain_plugins_manifest_list_get_name(const char *name){ + dap_chain_plugins_list_manifest_t *element; + LL_SEARCH(manifests, element, name, dap_chain_plugins_manifest_name_cmp); + return element; +} + +char* dap_chain_plugins_manifests_get_list_dependencyes(dap_chain_plugins_list_manifest_t *element){ + char *result = NULL; + dap_chain_plugins_list_char_t *e1; + LL_FOREACH(element->dependencys, e1){ + char *new_result = dap_strjoin(NULL, result, e1->value, ", "); + DAP_FREE(result); + result = new_result; + } + if (result != NULL){ + size_t size_result = dap_strlen(result); + size_t new_size_result = size_result - 2; + char *new_result = DAP_NEW_SIZE(char, new_size_result); + memcpy(new_result, result, new_size_result); + DAP_FREE(result); + result = new_result; + } else { + result = ""; + } + return result; +} + bool dap_chain_plugins_manifest_list_add_from_file(const char *file_path){ dap_chain_plugins_list_manifest_t *manifest = dap_chain_plugins_add_manifest_from_file(file_path); if (manifest == NULL) @@ -82,3 +122,30 @@ bool dap_chain_plugins_manifest_list_add_from_file(const char *file_path){ dap_chain_plugins_manifest_list_add_manifest(manifest); return true; } + +bool dap_chain_plugins_manifest_list_delete_name(const char *name){ + dap_chain_plugins_list_manifest_t *element; + LL_SEARCH(manifests, element, name, dap_chain_plugins_manifest_name_cmp); + if (element == NULL) + return false; + DAP_FREE(element->name); + DAP_FREE(element->version); + DAP_FREE(element->author); + DAP_FREE(element->description); + dap_chain_plugins_list_char_delete_all(element->dependencys); + LL_DELETE(manifests, element); + return true; +} +void dap_chain_plugins_manifest_list_delete_all(void){ + dap_chain_plugins_list_manifest_t *element; + dap_chain_plugins_list_manifest_t *tmp; + LL_FOREACH_SAFE(manifests, element, tmp){ + DAP_FREE(element->name); + DAP_FREE(element->version); + DAP_FREE(element->author); + DAP_FREE(element->description); + dap_chain_plugins_list_char_delete_all(element->dependencys); + LL_DELETE(manifests, element); + } +// LL_FOREACH_SAFE() +} -- GitLab