From c3402e5cb78345c1b5acb5a4df72b107bef33d57 Mon Sep 17 00:00:00 2001
From: "papizh.konstantin" <papizh.konstantin@demlabs.net>
Date: Tue, 26 Jan 2021 13:35:52 +0000
Subject: [PATCH] Feat 4748 1

---
 modules/global-db/dap_chain_global_db.c        | 14 +++-----------
 modules/global-db/dap_chain_global_db_driver.c |  8 +++++---
 modules/net/dap_chain_node_cli.c               | 13 +++++++------
 modules/net/dap_chain_node_cli_cmd.c           |  8 ++------
 modules/net/include/dap_chain_node_cli_cmd.h   |  1 +
 5 files changed, 18 insertions(+), 26 deletions(-)

diff --git a/modules/global-db/dap_chain_global_db.c b/modules/global-db/dap_chain_global_db.c
index e6ab5b05fc..afcfddce19 100644
--- a/modules/global-db/dap_chain_global_db.c
+++ b/modules/global-db/dap_chain_global_db.c
@@ -85,12 +85,7 @@ typedef struct history_extra_group_item
 
 // Tacked group callbacks
 static history_group_item_t * s_history_group_items = NULL;
-static char *s_storage_path = NULL;
 static history_extra_group_item_t * s_history_extra_group_items = NULL;
-#ifdef DAP_OS_UNIX
-static int cmd_gdb_import(int argc, char ** argv, void *arg_func, char ** a_str_reply);
-static int s_command_gdb_export(int argc, char ** argv, void *arg_func, char ** a_str_reply);
-#endif
 char * extract_group_prefix(const char * a_group);
 
 /**
@@ -243,17 +238,14 @@ void dap_chain_global_db_objs_delete(dap_global_db_obj_t *objs, size_t a_count)
  */
 int dap_chain_global_db_init(dap_config_t * g_config)
 {
-    s_storage_path= dap_strdup(
-                dap_config_get_item_str(g_config, "resources", "dap_global_db_path") );
+    const char *l_storage_path = dap_config_get_item_str(g_config, "resources", "dap_global_db_path");
     //const char *l_driver_name = dap_config_get_item_str_default(g_config, "resources", "dap_global_db_driver", "sqlite");
     const char *l_driver_name = dap_config_get_item_str_default(g_config, "resources", "dap_global_db_driver", "cdb");
     lock();
-    int res = dap_db_driver_init(l_driver_name, s_storage_path);
+    int res = dap_db_driver_init(l_driver_name, l_storage_path);
     unlock();
     if( res != 0 )
-        log_it(L_CRITICAL, "Hadn't initialized db driver \"%s\" on path \"%s\"", l_driver_name, s_storage_path );
-
-
+        log_it(L_CRITICAL, "Hadn't initialized db driver \"%s\" on path \"%s\"", l_driver_name, l_storage_path);
     return res;
 }
 
diff --git a/modules/global-db/dap_chain_global_db_driver.c b/modules/global-db/dap_chain_global_db_driver.c
index 0c9309cee7..7aa26e2006 100644
--- a/modules/global-db/dap_chain_global_db_driver.c
+++ b/modules/global-db/dap_chain_global_db_driver.c
@@ -81,16 +81,18 @@ int dap_db_driver_init(const char *a_driver_name, const char *a_filename_db)
     if(s_used_driver)
         dap_db_driver_deinit();
     s_used_driver = dap_strdup(a_driver_name);
+    char l_db_path_ext[strlen(a_driver_name) + strlen(a_filename_db) + 3];
+    dap_snprintf(l_db_path_ext, sizeof(l_db_path_ext), "/%s.%s", a_filename_db, a_driver_name);
     memset(&s_drv_callback, 0, sizeof(dap_db_driver_callbacks_t));
     if(!dap_strcmp(s_used_driver, "ldb"))
         l_ret = -1;
     else if(!dap_strcmp(s_used_driver, "sqlite"))
-        l_ret = dap_db_driver_sqlite_init(a_filename_db, &s_drv_callback);
+        l_ret = dap_db_driver_sqlite_init(l_db_path_ext, &s_drv_callback);
     else if(!dap_strcmp(s_used_driver, "cdb"))
-        l_ret = dap_db_driver_cdb_init(a_filename_db, &s_drv_callback);
+        l_ret = dap_db_driver_cdb_init(l_db_path_ext, &s_drv_callback);
 #ifdef DAP_CHAIN_GDB_ENGINE_MDBX
     else if(!dap_strcmp(s_used_driver, "mdbx"))
-        l_ret = dap_db_driver_mdbx_init(a_filename_db, &s_drv_callback);
+        l_ret = dap_db_driver_mdbx_init(l_db_path_ext, &s_drv_callback);
 #endif
     else
         log_it(L_ERROR, "Unknown global_db driver \"%s\"", a_driver_name);
diff --git a/modules/net/dap_chain_node_cli.c b/modules/net/dap_chain_node_cli.c
index d1018f5ebf..4595af5209 100644
--- a/modules/net/dap_chain_node_cli.c
+++ b/modules/net/dap_chain_node_cli.c
@@ -1032,13 +1032,14 @@ int dap_chain_node_cli_init(dap_config_t * g_config)
     dap_chain_node_cli_cmd_item_create ("exit", com_exit, NULL, "Stop application and exit",
                 "exit\n" );
 
-#ifdef DAP_OS_UNIX
-        // Export GDB to JSON
-        dap_chain_node_cli_cmd_item_create("gdb_export", cmd_gdb_export, NULL, "GDB export to file", "GDB export to file");
+     // Export GDB to JSON
+     dap_chain_node_cli_cmd_item_create("gdb_export", cmd_gdb_export, NULL, "Export gdb to JSON",
+                                        "gdb_export filename <filename without extension>");
+
+     //Import GDB from JSON
+     dap_chain_node_cli_cmd_item_create("gdb_import", cmd_gdb_import, NULL, "Import gdb from JSON",
+                                        "gdb_import filename <filename without extension>");
 
-        //Import GDB from JSON
-        dap_chain_node_cli_cmd_item_create("gdb_import", cmd_gdb_import, NULL, "GDB import from file", "GDB import from file");
-#endif
     // create thread for waiting of clients
     pthread_t l_thread_id;
 
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index 3a01460cc3..688a9ba509 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -4030,8 +4030,6 @@ int com_print_log(int argc, char ** argv, void *arg_func, char **str_reply)
     return 0;
 }
 
-
-#ifdef DAP_OS_UNIX
 /**
  * @brief cmd_gdb_export
  * @param argc
@@ -4059,7 +4057,7 @@ int cmd_gdb_export(int argc, char ** argv, void *arg_func, char ** a_str_reply)
     }
     char l_path[strlen(l_db_path) + strlen(l_filename) + 12];
     memset(l_path, '\0', sizeof(l_path));
-    dap_snprintf(l_path, sizeof(l_path), "%s/../%s.json", l_db_path, l_filename);
+    dap_snprintf(l_path, sizeof(l_path), "%s/%s.json", l_db_path, l_filename);
     /*FILE *l_json_file = fopen(l_path, "a");
     if (!l_json_file) {
         log_it(L_ERROR, "Can't open file %s", l_path);
@@ -4136,7 +4134,7 @@ int cmd_gdb_import(int argc, char ** argv, void *arg_func, char ** a_str_reply)
     const char *l_db_path = dap_config_get_item_str(g_config, "resources", "dap_global_db_path");
     char l_path[strlen(l_db_path) + strlen(l_filename) + 12];
     memset(l_path, '\0', sizeof(l_path));
-    dap_snprintf(l_path, sizeof(l_path), "%s/../%s.json", l_db_path, l_filename);
+    dap_snprintf(l_path, sizeof(l_path), "%s/%s.json", l_db_path, l_filename);
     struct json_object *l_json = json_object_from_file(l_path);
     if (!l_json) {
 #if JSON_C_MINOR_VERSION<15
@@ -4188,5 +4186,3 @@ int cmd_gdb_import(int argc, char ** argv, void *arg_func, char ** a_str_reply)
     json_object_put(l_json);
     return 0;
 }
-
-#endif
diff --git a/modules/net/include/dap_chain_node_cli_cmd.h b/modules/net/include/dap_chain_node_cli_cmd.h
index 7718569ecc..2e2b11b845 100644
--- a/modules/net/include/dap_chain_node_cli_cmd.h
+++ b/modules/net/include/dap_chain_node_cli_cmd.h
@@ -133,6 +133,7 @@ int com_print_log(int argc, char ** argv, void *arg_func, char **str_reply);
 int com_stats(int argc, char ** argv, void *arg_func, char **str_reply);
 
 int com_exit(int argc, char ** argv, void *arg_func, char **str_reply);
+
 int cmd_gdb_import(int argc, char ** argv, void *arg_func, char ** a_str_reply);
 int cmd_gdb_export(int argc, char ** argv, void *arg_func, char ** a_str_reply);
 
-- 
GitLab