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 {
s_char *c_form; /* prototype 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_permit; /* who is allowed to "do" this command */
};

View file

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