From 6052be616897d692fc57ab15b56266b4b3f4668b Mon Sep 17 00:00:00 2001
From: Christian Heller <c.heller@plomlompom.de>
Date: Tue, 28 Jan 2014 07:10:31 +0100
Subject: [PATCH] Check for existence of server config files.

---
 src/server/main.c               | 12 ++++++++++--
 src/server/map_object_actions.c |  4 ++--
 src/server/map_object_actions.h |  4 ++--
 src/server/map_objects.c        |  4 ++--
 src/server/map_objects.h        |  4 ++--
 src/server/world.h              |  2 ++
 6 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/src/server/main.c b/src/server/main.c
index 09ce530..0384ada 100644
--- a/src/server/main.c
+++ b/src/server/main.c
@@ -41,12 +41,20 @@ int main(int argc, char ** argv)
             exit_err(-1 == test, printf_err);
         }
     }
+    world.path_map_obj_defs = "confserver/defs";
+    world.path_map_obj_acts = "confserver/map_object_actions";
     world.path_in     = "server/in";
     world.path_out    = "server/out";
     world.path_record = "record";
     world.tmp_suffix  = "_tmp";
     set_err_try_fgets_delim("%%\n");
 
+    /* Check existence of config files. */
+    char * err_mod = "No map object definitions file.";
+    char * err_moa = "No map object actions file.";
+    exit_err(access(world.path_map_obj_defs, F_OK), err_mod);
+    exit_err(access(world.path_map_obj_acts, F_OK), err_moa);
+
     /* Treat world.path_in file as server process lock file. */
     char * err = "Found pre-existing input fifo file. This indicates another "
                  "roguelike-server may be running. It should be killed first.";
@@ -57,8 +65,8 @@ int main(int argc, char ** argv)
     set_cleanup_flag(CLEANUP_FIFO);
 
     /* Init from config files map object (action) definitions. */
-    init_map_object_defs("confserver/defs");
-    init_map_object_actions("confserver/map_object_actions");
+    init_map_object_defs();
+    init_map_object_actions();
 
     /* Enter play or replay mode loops, then leave properly. */
     run_game();
diff --git a/src/server/map_object_actions.c b/src/server/map_object_actions.c
index 476ba91..561a2e2 100644
--- a/src/server/map_object_actions.c
+++ b/src/server/map_object_actions.c
@@ -219,10 +219,10 @@ static void playerbonus_use(uint8_t no_object, uint8_t wrong_object)
 
 
 
-extern void init_map_object_actions(char * path)
+extern void init_map_object_actions()
 {
     char * f_name = "init_map_object_actions()";
-    FILE * file = try_fopen(path, "r", f_name);
+    FILE * file = try_fopen(world.path_map_obj_acts, "r", f_name);
     uint16_t linemax = textfile_sizes(file, NULL);
     char line[linemax + 1];
     struct MapObjAct ** moa_ptr_ptr = &world.map_obj_acts;
diff --git a/src/server/map_object_actions.h b/src/server/map_object_actions.h
index ae015e6..983f1aa 100644
--- a/src/server/map_object_actions.h
+++ b/src/server/map_object_actions.h
@@ -24,8 +24,8 @@ struct MapObjAct
 
 
 
-/* Init MapObjAct chain at world.map_obj_acts from file at "path". */
-extern void init_map_object_actions(char * path);
+/* Init MapObjAct chain at world.map_obj_acts. */
+extern void init_map_object_actions();
 
 /* Free MapObjAct * chain starting at "moa". */
 extern void free_map_object_actions(struct MapObjAct * moa);
diff --git a/src/server/map_objects.c b/src/server/map_objects.c
index 05cfc9a..0401c76 100644
--- a/src/server/map_objects.c
+++ b/src/server/map_objects.c
@@ -101,13 +101,13 @@ static void add_map_object(uint8_t type)
 
 
 
-extern void init_map_object_defs(char * filename)
+extern void init_map_object_defs()
 {
     char * f_name = "init_map_object_defs()";
     char * context = "Failed reading map object definitions file. ";
     char * err_toolarge = "Value is too large.";
     char * err_uniq     = "Declaration of ID already used.";
-    FILE * file = try_fopen(filename, "r", f_name);
+    FILE * file = try_fopen(world.path_map_obj_defs, "r", f_name);
     uint16_t linemax = textfile_sizes(file, NULL);
     struct MapObjDef ** last_mod_ptr_ptr = &world.map_obj_defs;
     char line[linemax + 1];
diff --git a/src/server/map_objects.h b/src/server/map_objects.h
index d5dc5b3..0796c3c 100644
--- a/src/server/map_objects.h
+++ b/src/server/map_objects.h
@@ -37,8 +37,8 @@ struct MapObjDef
 
 
 
-/* Initialize map object definitions chain from file at path "filename". */
-extern void init_map_object_defs(char * filename);
+/* Initialize map object definitions chain. */
+extern void init_map_object_defs();
 
 /* Free map object definitions chain starting at "mod_start". */
 extern void free_map_object_defs(struct MapObjDef * mod_start);
diff --git a/src/server/world.h b/src/server/world.h
index 56a5f28..3bea1f1 100644
--- a/src/server/world.h
+++ b/src/server/world.h
@@ -24,6 +24,8 @@ struct World
     char * path_in; /* Fifo to receive command messages. */
     char * path_out; /* File to write the game state as visible to clients.*/
     char * path_record; /* Record file from which to read the game history. */
+    char * path_map_obj_defs; /* path for map object definitions config file */
+    char * path_map_obj_acts; /* path for map object actions config file */
     char * tmp_suffix; /* Appended to paths of files for their tmp versions. */
     char * queue; /* Stores un-processed messages received via input fifo. */
     uint32_t queue_size;/* Length of .queue sequence of \0-terminated strings.*/
-- 
2.30.2