From 6c2654a6e4be4cdec81067002c667ade9895a82a Mon Sep 17 00:00:00 2001
From: Christian Heller <c.heller@plomlompom.de>
Date: Sun, 7 Dec 2014 03:35:51 +0100
Subject: [PATCH] Server: Execute THINGS_HERE command only on existing worlds.

---
 SERVER_COMMANDS  | 6 +++---
 src/server/run.c | 7 ++++++-
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/SERVER_COMMANDS b/SERVER_COMMANDS
index dba4b95..de6ad7b 100644
--- a/SERVER_COMMANDS
+++ b/SERVER_COMMANDS
@@ -54,9 +54,9 @@ QUIT
 Shut down server.
 
 THINGS_HERE [0 to 255] [0 to 255]
-Write line-by-line list of items at y position of first argument, x position of
-second argument into ./server/out file, enclosed by two lines "THINGS_HERE START"
-and "THINGS_HERE END".
+If world exists, write line-by-line list of things at y position of first
+argument, x position of second argument of map into ./server/out file, enclosed
+by two lines "THINGS_HERE START" and "THINGS_HERE END".
 
 Player commands
 ---------------
diff --git a/src/server/run.c b/src/server/run.c
index 9163ee0..d88d583 100644
--- a/src/server/run.c
+++ b/src/server/run.c
@@ -214,6 +214,11 @@ static uint8_t parse_command_meta(char * tok0)
         char * tok2 = token_from_line(NULL);
         if (tok1&&tok2 && !parsetest_int(tok1, '8')&&!parsetest_int(tok2, '8'))
         {
+            if (!world.exists)
+            {
+                err_line(1, "Command only works on existing worlds.");
+                return 0;
+            }
             send_to_outfile("THINGS_HERE START\n", 1);
             struct Thing * t;
             for (t = world.things; t; t = t->next)
@@ -411,7 +416,7 @@ extern uint8_t obey_msg(char * msg, uint8_t obey_state)
         }
         else if (!world.replay)
         {
-            err_line(1, "Unknown command/argument or bad number of tokens.");
+            err_line(1, "Invalid command/argument or bad number of tokens.");
         }
     }
     free(msg_copy);
-- 
2.30.2