From 087dedd5e06009436b9dad5aff692e49e7058cf9 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Wed, 13 Jul 2022 15:04:18 +0200 Subject: [PATCH] Improve diagnostics when invoked from incorrect path --- src/CMakeLists.txt | 1 + src/client/client.c | 12 ++---------- src/common/init.c | 27 +++++++++++++++++++++++++++ src/common/init.h | 6 ++++++ src/server/server.c | 12 ++---------- 5 files changed, 38 insertions(+), 20 deletions(-) create mode 100644 src/common/init.c create mode 100644 src/common/init.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 13c78b5..ae0936f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -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 diff --git a/src/client/client.c b/src/client/client.c index 1059ac2..10f8ba4 100644 --- a/src/client/client.c +++ b/src/client/client.c @@ -1,4 +1,3 @@ -#define _GNU_SOURCE // don't worry, GNU extensions are only used when available #include #include #include @@ -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 index 0000000..2be0bea --- /dev/null +++ b/src/common/init.c @@ -0,0 +1,27 @@ +#define _GNU_SOURCE // don't worry, GNU extensions are only used when available +#include +#include +#include +#include +#include + +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 index 0000000..1f3a0ad --- /dev/null +++ b/src/common/init.h @@ -0,0 +1,6 @@ +#ifndef _INIT_H_ +#define _INIT_H_ + +void dragonblocks_init(int argc); + +#endif diff --git a/src/server/server.c b/src/server/server.c index aa0ec43..14086c3 100644 --- a/src/server/server.c +++ b/src/server/server.c @@ -1,10 +1,10 @@ -#define _GNU_SOURCE // don't worry, GNU extensions are only used when available #include #include #include #include #include #include +#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; -- 2.44.0