Skip to content
Snippets Groups Projects
Commit ff8478aa authored by Constantin P.'s avatar Constantin P. 💬
Browse files

Merge branch 'hotfix-alias' into 'master'

hotfix-alias

See merge request !520
parents 1df64427 71c503d8
No related branches found
No related tags found
1 merge request!520hotfix-alias
Pipeline #52207 passed with stage
in 13 minutes and 42 seconds
......@@ -58,7 +58,7 @@ static bool s_debug_cli = false;
static dap_cli_cmd_t *cli_commands = 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 {
dap_worker_t *worker;
......@@ -191,9 +191,9 @@ void dap_cli_server_deinit()
* @param a_doc
* @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
* @param a_doc
* @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);
if (!l_cmd_item) {
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);
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
}
HASH_ADD_STR(cli_commands,name,l_cmd_item);
log_it(L_DEBUG,"Added command %s",l_cmd_item->name);
return l_cmd_item;
}
int json_commands(const char * a_name) {
......@@ -246,7 +247,7 @@ int json_commands(const char * a_name) {
"net_srv",
"net",
"srv_stake",
"voting",
"poll",
"srv_xchange",
"emit_delegate",
"token_decl",
......@@ -400,26 +401,29 @@ dap_cli_cmd_t* dap_cli_server_cmd_find(const char *a_name)
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) {
if (!a_alias || !a_pre_cmd || !a_cmd)
return;
dap_cli_cmd_aliases_t *l_alias = DAP_NEW(dap_cli_cmd_aliases_t);
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_cmd)
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);
memcpy(l_alias->alias, a_alias, l_alias_size);
l_alias->alias[l_alias_size] = '\0';
size_t l_addition_size = dap_strlen(a_pre_cmd);
memcpy(l_alias->addition, a_pre_cmd, l_addition_size);
l_alias->addition[l_addition_size] = '\0';
if (a_pre_cmd) {
size_t l_addition_size = dap_strlen(a_pre_cmd);
memcpy(l_alias->addition, a_pre_cmd, l_addition_size);
}
l_alias->standard_command = a_cmd;
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;
HASH_FIND_STR(s_command_alias, a_alias, l_alias);
if (!l_alias)
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);
return l_alias->standard_command;
}
......@@ -478,32 +482,35 @@ char *dap_cli_cmd_exec(char *a_req_str) {
DAP_DELETE(l_str_cmd);
}
char ** l_argv = dap_strsplit(str_cmd, ";", -1);
int argc = 0;
char **l_argv = dap_strsplit(str_cmd, ";", -1);
int l_argc = 0;
// Count argc
while (l_argv[argc] != NULL) argc++;
while (l_argv[l_argc] != NULL)
l_argc++;
// Support 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;
DAP_FREE(l_argv[0]);
DAP_DEL_Z(l_argv);
l_argv = al_argv;
argc = l_argc;
l_argv[0] = l_ncmd;
if (l_append_cmd) {
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
if(l_cmd && l_argv && l_cmd->func) {
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) {
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 {
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) {
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) {
dap_json_rpc_error_add(l_json_arr_reply, -1, "No function for command \"%s\" but it registred?!", str_cmd);
}
// 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);
} else {
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{
int dap_cli_server_init(bool a_debug_more, const char *a_cfg_section);
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, ...);
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);
......@@ -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_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);
//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