summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/config.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/config.c b/src/config.c
index f57696d..d0d8dbd 100644
--- a/src/config.c
+++ b/src/config.c
@@ -24,6 +24,8 @@
*/
+#define _GNU_SOURCE
+
#include "fastd.h"
#include "peer.h"
#include <config.ll.h>
@@ -32,6 +34,7 @@
#include <config.h>
#include <arpa/inet.h>
+#include <libgen.h>
#include <stdarg.h>
@@ -97,6 +100,12 @@ void fastd_read_config(fastd_context *ctx, fastd_config *conf, const char *filen
}
+ char *oldcwd = get_current_dir_name();
+ char *filename2 = strdup(filename);
+ char *dir = dirname(filename2);
+
+ chdir(dir);
+
yyscan_t scanner;
fastd_config_yylex_init(&scanner);
fastd_config_yyset_in(file, scanner);
@@ -121,6 +130,11 @@ void fastd_read_config(fastd_context *ctx, fastd_config *conf, const char *filen
fastd_config_pstate_delete(ps);
fastd_config_yylex_destroy(scanner);
+ chdir(oldcwd);
+
+ free(filename2);
+ free(oldcwd);
+
if (!use_stdin)
fclose(file);
}