Make users of struct cmdstr agree on prototype of member c_addr.

(player_login): Use player->argp[] to store arguments.
(client_cmd, user_cmd, sanc_cmd, coun_cmd, pass_cmd, play_cmd,
kill_cmd, list_cmd, quit_cmd): Remove parameters, fetch arguments from
player->argp[].
(cmdstr): Prototype member c_addr.

(play_cmd): Used to silently ignore up to two arguments if there
wasn't a third one.  Don't.
This commit is contained in:
Markus Armbruster 2004-02-18 19:04:01 +00:00
parent 7aafe31f70
commit d2244b6c24
2 changed files with 41 additions and 40 deletions

View file

@ -37,7 +37,7 @@
struct cmndstr { struct cmndstr {
s_char *c_form; /* prototype of command */ s_char *c_form; /* prototype of command */
int c_cost; /* btu cost of command */ int c_cost; /* btu cost of command */
int (*c_addr) (); /* core addr of appropriate routine */ int (*c_addr)(void); /* core addr of appropriate routine */
int c_flags; int c_flags;
int c_permit; /* who is allowed to "do" this command */ int c_permit; /* who is allowed to "do" this command */
}; };

View file

@ -66,8 +66,7 @@ void
player_login(void *ud) player_login(void *ud)
{ {
s_char buf[128]; s_char buf[128];
s_char space[512]; s_char space[128];
s_char *av[64];
int ac; int ac;
int cmd; int cmd;
@ -81,13 +80,13 @@ player_login(void *ud)
io_input(player->iop, IO_WAIT); io_input(player->iop, IO_WAIT);
continue; continue;
} }
ac = parse(buf, av, 0, space, 0); ac = parse(buf, player->argp, NULL, space, NULL);
cmd = comtch(av[0], login_coms, 0, 0); cmd = comtch(player->argp[0], login_coms, 0, 0);
if (cmd < 0) { if (cmd < 0) {
pr_id(player, C_BADCMD, "Command %s not found\n", av[0]); pr_id(player, C_BADCMD, "Command %s not found\n", player->argp[0]);
continue; continue;
} }
switch (login_coms[cmd].c_addr(player, ac, av)) { switch (login_coms[cmd].c_addr()) {
case RET_OK: case RET_OK:
break; break;
case RET_FAIL: case RET_FAIL:
@ -113,17 +112,17 @@ player_login(void *ud)
} }
static int static int
client_cmd(struct player *player, int ac, char **av) client_cmd(void)
{ {
int i; int i;
if (ac < 1 || av[1] == '\0') if (!player->argp[1])
return RET_SYN; return RET_SYN;
for (i = 1; i < ac; ++i) { for (i = 1; player->argp[i]; ++i) {
if (i > 1) if (i > 1)
(void)strncat(player->client, " ", sizeof(player->client) - 1); strncat(player->client, " ", sizeof(player->client) - 1);
(void)strncat(player->client, av[i], sizeof(player->client) - 1); strncat(player->client, player->argp[i], sizeof(player->client) - 1);
} }
player->client[sizeof(player->client) - 1] = '\0'; player->client[sizeof(player->client) - 1] = '\0';
pr_id(player, C_CMDOK, "talking to %s\n", player->client); pr_id(player, C_CMDOK, "talking to %s\n", player->client);
@ -131,25 +130,25 @@ client_cmd(struct player *player, int ac, char **av)
} }
static int static int
user_cmd(struct player *player, int ac, char **av) user_cmd(void)
{ {
if (ac < 1 || av[1] == '\0') if (!player->argp[1])
return RET_SYN; return RET_SYN;
(void)strncpy(player->userid, av[1], sizeof(player->userid) - 1); strncpy(player->userid, player->argp[1], sizeof(player->userid) - 1);
player->userid[sizeof(player->userid) - 1] = '\0'; player->userid[sizeof(player->userid) - 1] = '\0';
pr_id(player, C_CMDOK, "hello %s\n", player->userid); pr_id(player, C_CMDOK, "hello %s\n", player->userid);
return RET_OK; return RET_OK;
} }
static int static int
sanc_cmd(struct player *player, int ac, char **av) sanc_cmd(void)
{ {
struct nstr_item ni; struct nstr_item ni;
struct natstr nat; struct natstr nat;
int first = 1; int first = 1;
if (!opt_BLITZ) { if (!opt_BLITZ) {
pr_id(player, C_BADCMD, "Command %s not found\n", av[0]); pr_id(player, C_BADCMD, "Command %s not found\n", player->argp[0]);
return RET_FAIL; return RET_FAIL;
} }
@ -172,35 +171,35 @@ sanc_cmd(struct player *player, int ac, char **av)
} }
static int static int
coun_cmd(struct player *player, int ac, char **av) coun_cmd(void)
{ {
natid cnum; natid cnum;
if (ac < 1 || av[1] == '\0') if (!player->argp[1])
return RET_SYN; return RET_SYN;
if (natbyname(av[1], &cnum) < 0) { if (natbyname(player->argp[1], &cnum) < 0) {
pr_id(player, C_CMDERR, "country %s does not exist\n", av[1]); pr_id(player, C_CMDERR, "country %s does not exist\n", player->argp[1]);
return 0; return 0;
} }
player->cnum = cnum; player->cnum = cnum;
player->validated = 0; player->validated = 0;
pr_id(player, C_CMDOK, "country name %s\n", av[1]); pr_id(player, C_CMDOK, "country name %s\n", player->argp[1]);
return 0; return 0;
} }
static int static int
pass_cmd(struct player *player, int ac, char **av) pass_cmd(void)
{ {
if (ac < 1 || av[1] == '\0') if (!player->argp[1])
return RET_SYN; return RET_SYN;
if (player->cnum == 255) { if (player->cnum == 255) {
pr_id(player, C_CMDERR, "need country first\n"); pr_id(player, C_CMDERR, "need country first\n");
return RET_FAIL; return RET_FAIL;
} }
if (!natpass(player->cnum, av[1])) { if (!natpass(player->cnum, player->argp[1])) {
pr_id(player, C_CMDERR, "password bad, logging entry\n"); pr_id(player, C_CMDERR, "password bad, logging entry\n");
logerror("%s tried country #%d with %s", logerror("%s tried country #%d with %s",
praddr(player), player->cnum, av[1]); praddr(player), player->cnum, player->argp[1]);
return RET_FAIL; return RET_FAIL;
} }
player->validated++; player->validated++;
@ -209,27 +208,32 @@ pass_cmd(struct player *player, int ac, char **av)
return RET_OK; return RET_OK;
} }
/*ARGSUSED*/
static int static int
play_cmd(struct player *player, int ac, char **av) play_cmd(void)
{ {
extern char *banfil; extern char *banfil;
struct player *other; struct player *other;
natid cnum; natid cnum;
struct natstr *natp; struct natstr *natp;
char **ap;
if (ac == 4) { ap = player->argp;
(void)strncpy(player->userid, av[1], sizeof(player->userid) - 1); if (*++ap) {
strncpy(player->userid, *ap, sizeof(player->userid) - 1);
player->userid[sizeof(player->userid) - 1] = '\0'; player->userid[sizeof(player->userid) - 1] = '\0';
player->validated = 0; player->validated = 0;
if (natbyname(av[2], &cnum) < 0) { }
pr_id(player, C_CMDERR, "country %s does not exist\n", av[2]); if (*++ap) {
if (natbyname(*ap, &cnum) < 0) {
pr_id(player, C_CMDERR, "country %s does not exist\n", *ap);
return 0; return 0;
} }
if (!natpass(cnum, av[3])) { }
if (*++ap) {
if (!natpass(cnum, *ap)) {
pr_id(player, C_CMDERR, "password bad, logging entry\n"); pr_id(player, C_CMDERR, "password bad, logging entry\n");
logerror("%s tried country #%d with %s", logerror("%s tried country #%d with %s",
praddr(player), cnum, av[3]); praddr(player), cnum, *ap);
return RET_FAIL; return RET_FAIL;
} }
player->cnum = cnum; player->cnum = cnum;
@ -259,9 +263,8 @@ play_cmd(struct player *player, int ac, char **av)
return RET_OK; return RET_OK;
} }
/*ARGSUSED*/
static int static int
kill_cmd(struct player *player, int ac, char **av) kill_cmd(void)
{ {
struct player *other; struct player *other;
@ -279,9 +282,8 @@ kill_cmd(struct player *player, int ac, char **av)
return RET_OK; return RET_OK;
} }
/*ARGSUSED*/
static int static int
list_cmd(struct player *player, int ac, char **av) list_cmd(void)
{ {
struct player *lp; struct player *lp;
int first = 1; int first = 1;
@ -302,9 +304,8 @@ list_cmd(struct player *player, int ac, char **av)
return 0; return 0;
} }
/*ARGSUSED*/
static int static int
quit_cmd(struct player *player, int ac, char **av) quit_cmd(void)
{ {
pr_id(player, C_EXIT, "so long\n"); pr_id(player, C_EXIT, "so long\n");
io_shutdown(player->iop, IO_READ); io_shutdown(player->iop, IO_READ);