Skip to content
Snippets Groups Projects
Commit 71c503d8 authored by Roman Khlopkov's avatar Roman Khlopkov 🔜 Committed by Constantin P.
Browse files

hotfix-alias

parent 1df64427
No related branches found
No related tags found
1 merge request!520hotfix-alias
...@@ -58,7 +58,7 @@ static bool s_debug_cli = false; ...@@ -58,7 +58,7 @@ static bool s_debug_cli = false;
static dap_cli_cmd_t *cli_commands = NULL; static dap_cli_cmd_t *cli_commands = NULL;
static dap_cli_cmd_aliases_t *s_command_alias = NULL; static dap_cli_cmd_aliases_t *s_command_alias = NULL;
static inline void s_cmd_add_ex(const char *a_name, dap_cli_server_cmd_callback_ex_t a_func, void *a_arg_func, const char *a_doc, const char *a_doc_ex); static inline dap_cli_cmd_t *s_cmd_add_ex(const char *a_name, dap_cli_server_cmd_callback_ex_t a_func, void *a_arg_func, const char *a_doc, const char *a_doc_ex);
typedef struct cli_cmd_arg { typedef struct cli_cmd_arg {
dap_worker_t *worker; dap_worker_t *worker;
...@@ -191,9 +191,9 @@ void dap_cli_server_deinit() ...@@ -191,9 +191,9 @@ void dap_cli_server_deinit()
* @param a_doc * @param a_doc
* @param a_doc_ex * @param a_doc_ex
*/ */
void dap_cli_server_cmd_add(const char * a_name, dap_cli_server_cmd_callback_t a_func, const char *a_doc, const char *a_doc_ex) dap_cli_cmd_t *dap_cli_server_cmd_add(const char * a_name, dap_cli_server_cmd_callback_t a_func, const char *a_doc, const char *a_doc_ex)
{ {
s_cmd_add_ex(a_name, (dap_cli_server_cmd_callback_ex_t)(void *)a_func, NULL, a_doc, a_doc_ex); return s_cmd_add_ex(a_name, (dap_cli_server_cmd_callback_ex_t)(void *)a_func, NULL, a_doc, a_doc_ex);
} }
/** /**
...@@ -204,12 +204,12 @@ void dap_cli_server_cmd_add(const char * a_name, dap_cli_server_cmd_callback_t a ...@@ -204,12 +204,12 @@ void dap_cli_server_cmd_add(const char * a_name, dap_cli_server_cmd_callback_t a
* @param a_doc * @param a_doc
* @param a_doc_ex * @param a_doc_ex
*/ */
static inline void s_cmd_add_ex(const char * a_name, dap_cli_server_cmd_callback_ex_t a_func, void *a_arg_func, const char *a_doc, const char *a_doc_ex) static inline dap_cli_cmd_t *s_cmd_add_ex(const char * a_name, dap_cli_server_cmd_callback_ex_t a_func, void *a_arg_func, const char *a_doc, const char *a_doc_ex)
{ {
dap_cli_cmd_t *l_cmd_item = DAP_NEW_Z(dap_cli_cmd_t); dap_cli_cmd_t *l_cmd_item = DAP_NEW_Z(dap_cli_cmd_t);
if (!l_cmd_item) { if (!l_cmd_item) {
log_it(L_CRITICAL, "%s", c_error_memory_alloc); log_it(L_CRITICAL, "%s", c_error_memory_alloc);
return; return NULL;
} }
snprintf(l_cmd_item->name,sizeof (l_cmd_item->name),"%s",a_name); snprintf(l_cmd_item->name,sizeof (l_cmd_item->name),"%s",a_name);
l_cmd_item->doc = strdup( a_doc); l_cmd_item->doc = strdup( a_doc);
...@@ -222,6 +222,7 @@ static inline void s_cmd_add_ex(const char * a_name, dap_cli_server_cmd_callback ...@@ -222,6 +222,7 @@ static inline void s_cmd_add_ex(const char * a_name, dap_cli_server_cmd_callback
} }
HASH_ADD_STR(cli_commands,name,l_cmd_item); HASH_ADD_STR(cli_commands,name,l_cmd_item);
log_it(L_DEBUG,"Added command %s",l_cmd_item->name); log_it(L_DEBUG,"Added command %s",l_cmd_item->name);
return l_cmd_item;
} }
int json_commands(const char * a_name) { int json_commands(const char * a_name) {
...@@ -246,7 +247,7 @@ int json_commands(const char * a_name) { ...@@ -246,7 +247,7 @@ int json_commands(const char * a_name) {
"net_srv", "net_srv",
"net", "net",
"srv_stake", "srv_stake",
"voting", "poll",
"srv_xchange", "srv_xchange",
"emit_delegate", "emit_delegate",
"token_decl", "token_decl",
...@@ -400,26 +401,29 @@ dap_cli_cmd_t* dap_cli_server_cmd_find(const char *a_name) ...@@ -400,26 +401,29 @@ dap_cli_cmd_t* dap_cli_server_cmd_find(const char *a_name)
return l_cmd_item; return l_cmd_item;
} }
void dap_cli_server_alias_add(const char *a_alias, const char *a_pre_cmd, dap_cli_cmd_t *a_cmd) { dap_cli_cmd_aliases_t *dap_cli_server_alias_add(dap_cli_cmd_t *a_cmd, const char *a_pre_cmd, const char *a_alias)
if (!a_alias || !a_pre_cmd || !a_cmd) {
return; if (!a_alias || !a_cmd)
dap_cli_cmd_aliases_t *l_alias = DAP_NEW(dap_cli_cmd_aliases_t); return NULL;
dap_cli_cmd_aliases_t *l_alias = DAP_NEW_Z(dap_cli_cmd_aliases_t);
size_t l_alias_size = dap_strlen(a_alias); size_t l_alias_size = dap_strlen(a_alias);
memcpy(l_alias->alias, a_alias, l_alias_size); memcpy(l_alias->alias, a_alias, l_alias_size);
l_alias->alias[l_alias_size] = '\0'; if (a_pre_cmd) {
size_t l_addition_size = dap_strlen(a_pre_cmd); size_t l_addition_size = dap_strlen(a_pre_cmd);
memcpy(l_alias->addition, a_pre_cmd, l_addition_size); memcpy(l_alias->addition, a_pre_cmd, l_addition_size);
l_alias->addition[l_addition_size] = '\0'; }
l_alias->standard_command = a_cmd; l_alias->standard_command = a_cmd;
HASH_ADD_STR(s_command_alias, alias, l_alias); HASH_ADD_STR(s_command_alias, alias, l_alias);
return l_alias;
} }
dap_cli_cmd_t *dap_cli_server_cmd_find_by_alias(const char *a_alias, char **a_append, char **a_ncmd) { dap_cli_cmd_t *dap_cli_server_cmd_find_by_alias(const char *a_alias, char **a_append, char **a_ncmd)
{
dap_cli_cmd_aliases_t *l_alias = NULL; dap_cli_cmd_aliases_t *l_alias = NULL;
HASH_FIND_STR(s_command_alias, a_alias, l_alias); HASH_FIND_STR(s_command_alias, a_alias, l_alias);
if (!l_alias) if (!l_alias)
return NULL; return NULL;
*a_append = dap_strdup(l_alias->addition); *a_append = l_alias->addition[0] ? dap_strdup(l_alias->addition) : NULL;
*a_ncmd = dap_strdup(l_alias->standard_command->name); *a_ncmd = dap_strdup(l_alias->standard_command->name);
return l_alias->standard_command; return l_alias->standard_command;
} }
...@@ -478,32 +482,35 @@ char *dap_cli_cmd_exec(char *a_req_str) { ...@@ -478,32 +482,35 @@ char *dap_cli_cmd_exec(char *a_req_str) {
DAP_DELETE(l_str_cmd); DAP_DELETE(l_str_cmd);
} }
char ** l_argv = dap_strsplit(str_cmd, ";", -1); char **l_argv = dap_strsplit(str_cmd, ";", -1);
int argc = 0; int l_argc = 0;
// Count argc // Count argc
while (l_argv[argc] != NULL) argc++; while (l_argv[l_argc] != NULL)
l_argc++;
// Support alias // Support alias
if (l_finded_by_alias) { if (l_finded_by_alias) {
int l_argc = argc + 1;
char **al_argv = DAP_NEW_Z_COUNT(char*, l_argc + 1);
al_argv[0] = l_ncmd;
al_argv[1] = l_append_cmd;
for (int i = 1; i < argc; i++)
al_argv[i + 1] = l_argv[i];
cmd_name = l_ncmd; cmd_name = l_ncmd;
DAP_FREE(l_argv[0]); DAP_FREE(l_argv[0]);
DAP_DEL_Z(l_argv); l_argv[0] = l_ncmd;
l_argv = al_argv; if (l_append_cmd) {
argc = l_argc; l_argc++;
char **al_argv = DAP_NEW_Z_COUNT(char*, l_argc + 1);
al_argv[1] = l_ncmd;
al_argv[1] = l_append_cmd;
for (int i = 1; i < l_argc; i++)
al_argv[i + 1] = l_argv[i];
DAP_DEL_Z(l_argv);
l_argv = al_argv;
}
} }
// Call the command function // Call the command function
if(l_cmd && l_argv && l_cmd->func) { if(l_cmd && l_argv && l_cmd->func) {
if (json_commands(cmd_name)) { if (json_commands(cmd_name)) {
res = l_cmd->func(argc, l_argv, (void *)&l_json_arr_reply); res = l_cmd->func(l_argc, l_argv, (void *)&l_json_arr_reply);
} else if (l_cmd->arg_func) { } else if (l_cmd->arg_func) {
res = l_cmd->func_ex(argc, l_argv, l_cmd->arg_func, (void *)&str_reply); res = l_cmd->func_ex(l_argc, l_argv, l_cmd->arg_func, (void *)&str_reply);
} else { } else {
res = l_cmd->func(argc, l_argv, (void *)&str_reply); res = l_cmd->func(l_argc, l_argv, (void *)&str_reply);
} }
} else if (l_cmd) { } else if (l_cmd) {
log_it(L_WARNING,"NULL arguments for input for command \"%s\"", str_cmd); log_it(L_WARNING,"NULL arguments for input for command \"%s\"", str_cmd);
...@@ -513,7 +520,7 @@ char *dap_cli_cmd_exec(char *a_req_str) { ...@@ -513,7 +520,7 @@ char *dap_cli_cmd_exec(char *a_req_str) {
dap_json_rpc_error_add(l_json_arr_reply, -1, "No function for command \"%s\" but it registred?!", str_cmd); dap_json_rpc_error_add(l_json_arr_reply, -1, "No function for command \"%s\" but it registred?!", str_cmd);
} }
// find '-verbose' command // find '-verbose' command
l_verbose = dap_cli_server_cmd_find_option_val(l_argv, 1, argc, "-verbose", NULL); l_verbose = dap_cli_server_cmd_find_option_val(l_argv, 1, l_argc, "-verbose", NULL);
dap_strfreev(l_argv); dap_strfreev(l_argv);
} else { } else {
dap_json_rpc_error_add(l_json_arr_reply, -1, "can't recognize command=%s", str_cmd); dap_json_rpc_error_add(l_json_arr_reply, -1, "can't recognize command=%s", str_cmd);
......
...@@ -64,7 +64,7 @@ typedef struct dap_cli_cmd_aliases{ ...@@ -64,7 +64,7 @@ typedef struct dap_cli_cmd_aliases{
int dap_cli_server_init(bool a_debug_more, const char *a_cfg_section); int dap_cli_server_init(bool a_debug_more, const char *a_cfg_section);
void dap_cli_server_deinit(); void dap_cli_server_deinit();
void dap_cli_server_cmd_add(const char * a_name, dap_cli_server_cmd_callback_t a_func, const char *a_doc, const char *a_doc_ex); dap_cli_cmd_t *dap_cli_server_cmd_add(const char * a_name, dap_cli_server_cmd_callback_t a_func, const char *a_doc, const char *a_doc_ex);
DAP_PRINTF_ATTR(2, 3) void dap_cli_server_cmd_set_reply_text(void **a_str_reply, const char *str, ...); DAP_PRINTF_ATTR(2, 3) void dap_cli_server_cmd_set_reply_text(void **a_str_reply, const char *str, ...);
int dap_cli_server_cmd_find_option_val( char** argv, int arg_start, int arg_end, const char *opt_name, const char **opt_value); int dap_cli_server_cmd_find_option_val( char** argv, int arg_start, int arg_end, const char *opt_name, const char **opt_value);
int dap_cli_server_cmd_check_option( char** argv, int arg_start, int arg_end, const char *opt_name); int dap_cli_server_cmd_check_option( char** argv, int arg_start, int arg_end, const char *opt_name);
...@@ -73,7 +73,7 @@ void dap_cli_server_cmd_apply_overrides(const char * a_name, const dap_cli_serve ...@@ -73,7 +73,7 @@ void dap_cli_server_cmd_apply_overrides(const char * a_name, const dap_cli_serve
dap_cli_cmd_t* dap_cli_server_cmd_get_first(); dap_cli_cmd_t* dap_cli_server_cmd_get_first();
dap_cli_cmd_t* dap_cli_server_cmd_find(const char *a_name); dap_cli_cmd_t* dap_cli_server_cmd_find(const char *a_name);
void dap_cli_server_alias_add(const char *a_alias, const char *a_pre_cmd, dap_cli_cmd_t *a_cmd); dap_cli_cmd_aliases_t *dap_cli_server_alias_add(dap_cli_cmd_t *a_cmd, const char *a_pre_cmd, const char *a_alias);
dap_cli_cmd_t *dap_cli_server_cmd_find_by_alias(const char *a_cli, char **a_append, char **a_ncmd); dap_cli_cmd_t *dap_cli_server_cmd_find_by_alias(const char *a_cli, char **a_append, char **a_ncmd);
//for json //for json
......
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