]> git.lizzy.rs Git - dragonblocks_alpha.git/commitdiff
Improve diagnostics when invoked from incorrect path
authorElias Fleckenstein <eliasfleckenstein@web.de>
Wed, 13 Jul 2022 13:04:18 +0000 (15:04 +0200)
committerElias Fleckenstein <eliasfleckenstein@web.de>
Wed, 13 Jul 2022 13:04:18 +0000 (15:04 +0200)
src/CMakeLists.txt
src/client/client.c
src/common/init.c [new file with mode: 0644]
src/common/init.h [new file with mode: 0644]
src/server/server.c

index 13c78b541e5786115bec4b33f72b537767d6eed1..ae0936f0077eb5122e55c830260f3e88e30e53ef 100644 (file)
@@ -77,6 +77,7 @@ add_library(dragonblocks
        common/day.c
        common/environment.c
        common/facedir.c
+       common/init.c
        common/interrupt.c
        common/item.c
        common/node.c
index 1059ac2c9bdd61e0751e9565136ad9d0c0e86961..10f8ba4977a2c7b0ce072eae2026dafb3164f5e7 100644 (file)
@@ -1,4 +1,3 @@
-#define _GNU_SOURCE // don't worry, GNU extensions are only used when available
 #include <dragonnet/init.h>
 #include <dragonstd/flag.h>
 #include <stdio.h>
@@ -16,6 +15,7 @@
 #include "client/game.h"
 #include "client/input.h"
 #include "common/day.h"
+#include "common/init.h"
 #include "common/interrupt.h"
 #include "common/perlin.h"
 #include "types.h"
@@ -110,16 +110,8 @@ static void on_ToClientMovement(__attribute__((unused)) DragonnetPeer *peer, ToC
 
 int main(int argc, char **argv)
 {
-#ifdef __GLIBC__ // check whether bloat is enabled
-       pthread_setname_np(pthread_self(), "main");
-#endif // __GLIBC__
+       dragonblocks_init(argc);
 
-       if (argc < 2) {
-               fprintf(stderr, "[error] missing address\n");
-               return EXIT_FAILURE;
-       }
-
-       dragonnet_init();
        if (!(client = dragonnet_connect(argv[1]))) {
                fprintf(stderr, "[error] failed to connect to server\n");
                return EXIT_FAILURE;
diff --git a/src/common/init.c b/src/common/init.c
new file mode 100644 (file)
index 0000000..2be0bea
--- /dev/null
@@ -0,0 +1,27 @@
+#define _GNU_SOURCE // don't worry, GNU extensions are only used when available
+#include <dragonnet/init.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+
+void dragonblocks_init(int argc)
+{
+#ifdef __GLIBC__ // check whether bloat is enabled
+       pthread_setname_np(pthread_self(), "main");
+#endif // __GLIBC__
+
+       struct stat sb;
+       if (stat(ASSET_PATH, &sb) != 0 || !S_ISDIR(sb.st_mode)) {
+               fprintf(stderr, "[error] asset directory not found at %s, "
+                       "invoke game from correct path\n", ASSET_PATH);
+               exit(EXIT_FAILURE);
+       }
+
+       if (argc < 2) {
+               fprintf(stderr, "[error] missing address\n");
+               exit(EXIT_FAILURE);
+       }
+
+       dragonnet_init();
+}
diff --git a/src/common/init.h b/src/common/init.h
new file mode 100644 (file)
index 0000000..1f3a0ad
--- /dev/null
@@ -0,0 +1,6 @@
+#ifndef _INIT_H_
+#define _INIT_H_
+
+void dragonblocks_init(int argc);
+
+#endif
index aa0ec431355c3f5f5ab408e91a806e16d62cfe3e..14086c3c1334f196c05badda4bd7e7a5aae0af50 100644 (file)
@@ -1,10 +1,10 @@
-#define _GNU_SOURCE // don't worry, GNU extensions are only used when available
 #include <dragonnet/addr.h>
 #include <dragonnet/init.h>
 #include <pthread.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <time.h>
+#include "common/init.h"
 #include "common/interrupt.h"
 #include "server/database.h"
 #include "server/server.h"
@@ -53,16 +53,8 @@ static void on_ToServerRequestChunk(DragonnetPeer *peer, ToServerRequestChunk *p
 // server entry point
 int main(int argc, char **argv)
 {
-#ifdef __GLIBC__ // check whether bloat is enabled
-       pthread_setname_np(pthread_self(), "main");
-#endif // __GLIBC__
+       dragonblocks_init(argc);
 
-       if (argc < 2) {
-               fprintf(stderr, "[error] missing address\n");
-               return EXIT_FAILURE;
-       }
-
-       dragonnet_init();
        if (!(server = dragonnet_listener_new(argv[1]))) {
                fprintf(stderr, "[error] failed to listen to connections\n");
                return EXIT_FAILURE;