diff options
Diffstat (limited to 'minecctl/minecctl.c')
-rw-r--r-- | minecctl/minecctl.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/minecctl/minecctl.c b/minecctl/minecctl.c index 5ac3942..3d21ae6 100644 --- a/minecctl/minecctl.c +++ b/minecctl/minecctl.c @@ -34,7 +34,10 @@ static void dump_config(struct cfg *cfg) info("rcon_password : %s", cfg->rcon_password); info("rcon_addrstr : %s", cfg->rcon_addrstr); info("mc_addrstr : %s", cfg->mc_addrstr); - info("cmdstr : %s", cfg->cmdstr); + if (cfg->commands) { + for (char *const *cmd = cfg->commands; *cmd; cmd++) + info("command : %s", *cmd); + } info("cmd : %p", cfg->cmd); info("force stop : %s", cfg->force_stop ? "yes" : "no"); @@ -81,6 +84,7 @@ _noreturn_ static void usage(bool no_error) " pcount [SERVER] get player count for SERVER\n" " console [SERVER] interactive command line for SERVER\n" " cmd [SERVER] CMD send CMD to SERVER\n" + " cmds [SERVER] CMDS... send multiple CMDS to SERVER\n" " [SERVER] CMD shorthand for \"cmd [SERVER] CMD\"\n" " [SERVER] shorthand for \"console [SERVER]\"\n" "\n" @@ -249,6 +253,8 @@ static void parse_command(struct cfg *cfg, char *const *argv) cfg->cmd = do_console; break; case CMD_COMMAND: + _fallthrough_; + case CMD_COMMANDS: get_optional_server_arg(cfg, &argv, true); if (!*argv) { @@ -256,8 +262,11 @@ static void parse_command(struct cfg *cfg, char *const *argv) usage(false); } - cfg->cmdstr = strv_join(argv); - cfg->cmd = do_command; + if (cmd == CMD_COMMANDS) + cfg->commands = strv_copy(argv); + else + cfg->commands = strv_from_strs(strv_join(argv), NULL); + cfg->cmd = do_commands; break; case CMD_INVALID: /* shorthand notation */ @@ -268,8 +277,8 @@ static void parse_command(struct cfg *cfg, char *const *argv) cfg->cmd = do_console; } else { /* CMD... */ - cfg->cmdstr = strv_join(argv); - cfg->cmd = do_command; + cfg->commands = strv_from_strs(strv_join(argv), NULL); + cfg->cmd = do_commands; } break; default: @@ -360,7 +369,7 @@ static void parse_cmdline(struct cfg *cfg, int argc, char *const *argv) } } -int main(int argc, char **argv) +int main(int argc, char *const *argv) { struct cfg cfg = { .servers = LIST_HEAD_INIT(cfg.servers), @@ -393,8 +402,8 @@ int main(int argc, char **argv) out: server_free_all(&cfg); free_password(&cfg.rcon_password); + strv_free(cfg.commands); xfree(cfg.rcon_addrstr); xfree(cfg.mc_addrstr); - xfree(cfg.cmdstr); exit(success ? EXIT_SUCCESS : EXIT_FAILURE); } |