summaryrefslogtreecommitdiff
path: root/minecctl/minecctl.c
diff options
context:
space:
mode:
Diffstat (limited to 'minecctl/minecctl.c')
-rw-r--r--minecctl/minecctl.c23
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);
}