Default command tree bits.

This commit is contained in:
Your Name
2026-06-30 15:33:37 +01:00
parent 9569c57fc3
commit eb2e26f4cd
2 changed files with 14 additions and 30 deletions

View File

@@ -763,6 +763,8 @@ cmd_parse_from_arguments(struct args_value *values, u_int count)
case ARGS_COMMANDS: case ARGS_COMMANDS:
child = cmd_parse_new_commands_node(values[i].cmd, 0); child = cmd_parse_new_commands_node(values[i].cmd, 0);
break; break;
default:
fatalx("unknown argument type");
} }
TAILQ_INSERT_TAIL(&cmd->children, child, entry); TAILQ_INSERT_TAIL(&cmd->children, child, entry);
} }

View File

@@ -2578,7 +2578,10 @@ server_client_dispatch_command(struct client *c, struct imsg *imsg)
size_t len; size_t len;
int argc = 0; int argc = 0;
char **argv, *cause; char **argv, *cause;
struct cmdq_item *new_item; struct cmdq_item *item;
struct cmd_invoke_input ci = { 0 };
struct args_value *values;
struct cmd_parse_tree *tree;
if (c->flags & CLIENT_EXIT) if (c->flags & CLIENT_EXIT)
return (0); return (0);
@@ -2598,40 +2601,19 @@ server_client_dispatch_command(struct client *c, struct imsg *imsg)
} }
argc = data.argc; argc = data.argc;
if (argc == 0) { if (argc == 0)
new_item = cmdq_get_callback(server_client_default_command, item = cmdq_get_callback(server_client_default_command, NULL);
NULL); else {
} else {
#if 0 /* XXX: command parser conversion */
struct cmd_parse_result *pr;
struct args_value *values;
values = args_from_vector(argc, argv); values = args_from_vector(argc, argv);
pr = cmd_parse_from_arguments(values, argc, NULL); tree = cmd_parse_from_arguments(values, argc);
switch (pr->status) {
case CMD_PARSE_ERROR:
cause = pr->error;
goto error;
case CMD_PARSE_SUCCESS:
break;
}
args_free_values(values, argc); args_free_values(values, argc);
free(values); free(values);
cmd_free_argv(argc, argv); cmd_free_argv(argc, argv);
if ((c->flags & CLIENT_READONLY) &&
!cmd_list_all_have(pr->cmdlist, CMD_READONLY)) { item = cmd_invoke_get(tree, NULL, &ci);
new_item = cmdq_get_callback(server_client_read_only, cmd_parse_free(tree);
NULL);
} else
new_item = cmdq_get_command(pr->cmdlist, NULL);
cmd_list_free(pr->cmdlist);
#else
cause = xstrdup(
"XXX: command parser conversion not done for client commands");
goto error;
#endif
} }
cmdq_append(c, new_item); cmdq_append(c, item);
cmdq_append(c, cmdq_get_callback(server_client_command_done, NULL)); cmdq_append(c, cmdq_get_callback(server_client_command_done, NULL));
return (0); return (0);