home
·
contact
·
privacy
projects
/
plomrogue
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Server: Ensure THING_ACTION command fails on argument 0.
[plomrogue]
/
src
/
server
/
god_commands.c
diff --git
a/src/server/god_commands.c
b/src/server/god_commands.c
index 4ed9f7361452db42732b7af9f5cebf0f4b690515..8bde74235a29e721e7c2afd3dcda2ac7713cafcf 100644
(file)
--- a/
src/server/god_commands.c
+++ b/
src/server/god_commands.c
@@
-53,6
+53,9
@@
static uint8_t parse_thing_manipulation(char * tok0, char * tok1);
/* Performs parse_world_active()'s world activation legality tests. */
static uint8_t world_may_be_set_active();
/* Performs parse_world_active()'s world activation legality tests. */
static uint8_t world_may_be_set_active();
+/* Unlink worldstate file if it exists. */
+static void remove_worldstate_file();
+
/* Parse/apply god command in "tok0"/"tok1" on toggling world.exists. Unset if
* argument is 0 and unlink worldstate file, but only set it on positive
* argument if it is not already set and a thing action of name S_CMD_WAIT, a
/* Parse/apply god command in "tok0"/"tok1" on toggling world.exists. Unset if
* argument is 0 and unlink worldstate file, but only set it on positive
* argument if it is not already set and a thing action of name S_CMD_WAIT, a
@@
-148,10
+151,19
@@
static uint8_t parse_thingaction_manipulation(char * tok0, char * tok1)
if (world.exists)
{
world.exists = 0 != get_thing_action_id_by_name(s[S_CMD_WAIT]);
if (world.exists)
{
world.exists = 0 != get_thing_action_id_by_name(s[S_CMD_WAIT]);
+ if (!world.exists)
+ {
+ remove_worldstate_file();
+ }
}
}
else if (parse_val(tok0, tok1, s[S_CMD_THINGACTION], '8', (char *) &id))
{
}
}
else if (parse_val(tok0, tok1, s[S_CMD_THINGACTION], '8', (char *) &id))
{
+ if (!id)
+ {
+ err_line(1, "Value must be >= 1 and <= 255.");
+ return 1;
+ }
ta = get_thing_action(id);
if (!ta)
{
ta = get_thing_action(id);
if (!ta)
{
@@
-330,9
+342,19
@@
static uint8_t world_may_be_set_active()
+static void remove_worldstate_file()
+{
+ if (!access(s[S_PATH_WORLDSTATE], F_OK))
+ {
+ int test = unlink(s[S_PATH_WORLDSTATE]);
+ exit_trouble(-1 == test, __func__, "unlink");
+ }
+}
+
+
+
static uint8_t parse_world_active(char * tok0, char * tok1)
{
static uint8_t parse_world_active(char * tok0, char * tok1)
{
- char * f_name = "parse_world_active()";
if (!strcmp(tok0, s[S_CMD_WORLD_ACTIVE]) && !parsetest_int(tok1, '8'))
{
if (!parsetest_int(tok1, '8'))
if (!strcmp(tok0, s[S_CMD_WORLD_ACTIVE]) && !parsetest_int(tok1, '8'))
{
if (!parsetest_int(tok1, '8'))
@@
-340,11
+362,7
@@
static uint8_t parse_world_active(char * tok0, char * tok1)
uint8_t argument = atoi(tok1);
if (!argument)
{
uint8_t argument = atoi(tok1);
if (!argument)
{
- if (!access(s[S_PATH_WORLDSTATE], F_OK))
- {
- int test = unlink(s[S_PATH_WORLDSTATE]);
- exit_trouble(-1 == test, f_name, "unlink()");
- }
+ remove_worldstate_file();
world.exists = 0;
}
else if (world.exists)
world.exists = 0;
}
else if (world.exists)
@@
-386,6
+404,7
@@
static uint8_t set_map_length(char * tok0, char * tok1)
return 1;
}
world.exists = 0;
return 1;
}
world.exists = 0;
+ remove_worldstate_file();
free_things(world.things);
free(world.map.cells);
world.map.cells = NULL; /* Since remake_map() runs free() on this. */
free_things(world.things);
free(world.map.cells);
world.map.cells = NULL; /* Since remake_map() runs free() on this. */