diff --git a/include/dap_chain_plugins_manifest.h b/include/dap_chain_plugins_manifest.h index 39ae2c7516b125489680fdd5d566ef26d09b6c2b..107a6c213b2ecc8f8af68f0491fde61fdbf1c657 100644 --- a/include/dap_chain_plugins_manifest.h +++ b/include/dap_chain_plugins_manifest.h @@ -1,11 +1,11 @@ #ifndef _DAP_CHAIN_PLUGINS_MANIFEST_ #define _DAP_CHAIN_PLUGINS_MANIFEST_ #include "dap_common.h" -#include "dap_list.h" #include "dap_strfuncs.h" #include "stdio.h" #include "json-c/json_object.h" #include "json-c/json_tokener.h" +#include "utlist.h" #ifdef __cplusplus extern "C"{ @@ -14,37 +14,32 @@ extern "C"{ #undef LOG_TAG #define LOG_TAG "dap_chain_plugins_manifest" -enum data_in_manifest{ - NAME, - VERSION, - DEPENDENCYS, - AUTHOR, - DESCRIPTION -}; +typedef struct dap_chain_plugins_list_char{ + char *value; + struct dap_chain_plugins_list_char *next; +}dap_chain_plugins_list_char_t; -typedef struct manifest{ +typedef struct dap_list_manifest{ char *name; char *version; - dap_list_t *dependencys; char *author; char *description; - bool init; -}manifest_t; + dap_chain_plugins_list_char_t *dependencys; + struct dap_list_manifest *next; +}dap_chain_plugins_list_manifest_t; -manifest_t *dap_chain_plugins_manifest_new(const char *name, const char *version, const dap_list_t *dep, const char *author, - const char *description); -void dap_chain_plugins_manifest_free(manifest_t *manifest); -manifest_t* dap_chain_plugins_add_manifest_from_file(const char *file_path); +dap_chain_plugins_list_manifest_t* manifests; -static dap_list_t *manifests; +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(); -manifest_t *dap_chain_plugins_manifest_get_list(size_t index); -unsigned int dap_chain_plugins_manifests_get_lenght(); -void dap_chain_plugins_manifest_list_free(); -void dap_chain_plugins_manifest_list_add_manifest(manifest_t *manifest); -bool dap_chain_plugins_manifest_list_add_from_file(const char *file_path); +dap_chain_plugins_list_manifest_t* dap_chain_plugins_manifests_get_list(); + +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); #ifdef __cplusplus } diff --git a/src/dap_chain_plugins_manifest.c b/src/dap_chain_plugins_manifest.c index 6b23616d8b276abb536bbddabb9cbe7594be1a4c..4a202f98279d01c0b5e6206d72ed755e221c6754 100644 --- a/src/dap_chain_plugins_manifest.c +++ b/src/dap_chain_plugins_manifest.c @@ -1,38 +1,40 @@ #include "dap_chain_plugins_manifest.h" -dap_list_t *JSON_array_to_dap_list(json_object *obj){ - int len = json_object_array_length(obj); - dap_list_t *list = NULL; - json_object *j_data; - char *data; - for (int i = 0; i < len; i++){ - j_data = json_object_array_get_idx(obj, i); - data = dap_strdup(json_object_get_string(j_data)); - dap_list_append(list, data); +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); + man->name = dap_strdup(name); + man->author = dap_strdup(author); + man->version = dap_strdup(version); + man->description = dap_strdup(description); + man->dependencys = NULL; + //copy informantion from dep to man->dependencys + int len_dep; + dap_chain_plugins_list_char_t *char_t; + LL_COUNT((dap_chain_plugins_list_char_t*)dep, char_t, len_dep); + LL_FOREACH((dap_chain_plugins_list_char_t*)dep, char_t){ + LL_APPEND(man->dependencys, char_t); } - return list; + man->dependencys = (dap_chain_plugins_list_char_t*)dep; + return man; } -manifest_t *dap_chain_plugins_manifest_new(const char *name, const char *version, const dap_list_t *dep, const char *author, - const char *description){ - manifest_t *manifest = (manifest_t*)malloc(sizeof(manifest_t));//DAP_NEW(manifest_t); - manifest->name = dap_strdup(name); - manifest->version = dap_strdup(version); - manifest->dependencys = dap_list_copy((dap_list_t*)dep); - manifest->author = dap_strdup(author); - manifest->description = dap_strdup(description); - manifest->init = false; - return manifest; +static dap_chain_plugins_list_char_t* JSON_array_to_dap_list_char(json_object *j_obj){ + dap_chain_plugins_list_char_t *list = NULL; + dap_chain_plugins_list_char_t *element = NULL; + for (int i = 0; i < json_object_array_length(j_obj); i++){ + element = (dap_chain_plugins_list_char_t*)DAP_NEW(dap_chain_plugins_list_char_t); + element->value = dap_strdup(json_object_get_string(json_object_array_get_idx(j_obj, i))); + LL_APPEND(list, element); + } + return list; } -void dap_chain_plugins_manifest_free(manifest_t *manifest){ - free(manifest->name); - free(manifest->version); - free(manifest->author); - free(manifest->description); - dap_list_free(manifest->dependencys); - free(manifest); + +void dap_chain_plugins_manifest_list_create(){ + manifests = NULL; } -manifest_t* dap_chain_plugins_add_manifest_from_file(const char *file_path){ + +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"); FILE *file = fopen(file_path, "rt"); @@ -58,38 +60,23 @@ manifest_t* dap_chain_plugins_add_manifest_from_file(const char *file_path){ version = json_object_get_string(j_version); author = json_object_get_string(j_author); description = json_object_get_string(j_description); - dap_list_t *dep = JSON_array_to_dap_list(j_dependencys); + dap_chain_plugins_list_char_t *dep = JSON_array_to_dap_list_char(j_dependencys); DAP_FREE(json); - manifest_t *manifest = dap_chain_plugins_manifest_new(name, version, dep, author, description); + dap_chain_plugins_list_char_t *tmp = NULL; + dap_chain_plugins_list_manifest_t *manifest = dap_chain_plugins_manifest_new(name, version, dep, author, description); return manifest; } -//-------------------------------------------------------- -void dap_chain_plugins_manifest_list_create(){ - manifests = NULL; -} -manifest_t *dap_chain_plugins_manifest_get_list(size_t index){ - return (manifest_t*)dap_list_nth_data(manifests, (unsigned int)index); +void dap_chain_plugins_manifest_list_add_manifest(dap_chain_plugins_list_manifest_t *man){ + LL_APPEND(manifests, man); } -unsigned int dap_chain_plugins_manifests_get_lenght(){ - return dap_list_length(manifests); +dap_chain_plugins_list_manifest_t* dap_chain_plugins_manifests_get_list(){ + return manifests; } -void dap_chain_plugins_manifest_list_free(){ - unsigned int len = dap_list_length(manifests); - for (unsigned int i = 0; i < len;i++){ - manifest_t* manifest = dap_list_nth_data(manifests, i); - dap_chain_plugins_manifest_free(manifest); - } - dap_list_free(manifests); -} - -void dap_chain_plugins_manifest_list_add_manifest(manifest_t *manifest){ - manifests = dap_list_append(manifests, manifest); -} bool dap_chain_plugins_manifest_list_add_from_file(const char *file_path){ - manifest_t *manifest = dap_chain_plugins_add_manifest_from_file(file_path); + dap_chain_plugins_list_manifest_t *manifest = dap_chain_plugins_add_manifest_from_file(file_path); if (manifest == NULL) return false; dap_chain_plugins_manifest_list_add_manifest(manifest);