diff options
-rw-r--r-- | meson.build | 2 | ||||
-rw-r--r-- | src/daemon/meson.build | 3 | ||||
-rw-r--r-- | src/daemon/settings.c | 33 | ||||
-rw-r--r-- | src/daemon/settings_private.h | 35 |
4 files changed, 63 insertions, 10 deletions
diff --git a/meson.build b/meson.build index 4f9df2a..44e004e 100644 --- a/meson.build +++ b/meson.build @@ -3,7 +3,7 @@ project('usurpation', 'c', default_options : ['c_std=gnu11', 'buildtype=release'], meson_version : '>=0.49.0') -deps = [dependency('threads')] +deps = [dependency('threads'), dependency('rin')] progname = 'usurpd' resource_dir = join_paths(get_option('datadir'), progname) diff --git a/src/daemon/meson.build b/src/daemon/meson.build index f83613c..44fa299 100644 --- a/src/daemon/meson.build +++ b/src/daemon/meson.build @@ -1,7 +1,8 @@ d_filenames = [ 'main.c', 'settings.c', - 'net.c', + 'net.c', + 'settings_private.h', ] d_conf_filenames = [ diff --git a/src/daemon/settings.c b/src/daemon/settings.c index 3777f23..9c4011f 100644 --- a/src/daemon/settings.c +++ b/src/daemon/settings.c @@ -19,11 +19,7 @@ */ #include "settings.h" - -static struct settings { - int daemonize; - unsigned short int port; -} settings; +#include "settings_private.h" /* TODO: should be, in this order: looking at options provided via command * line arguments, looking at at /etc/conf.d/usurpation.conf or @@ -31,16 +27,37 @@ static struct settings { */ void settings_init(void) { - settings.daemonize =0; - settings.port = 6996 + unset_flag(flag_daemonize); + settings.port = 6996; } int setting_detach(void) { - return settings.daemonize; + return test_flag(flag_daemonize); } unsigned short int setting_port(void) { return settings.port; } + +/* could be a one-liner, but let's make the logic more obvious */ +int test_flag(unsigned int flag) +{ + int ret; + + ret = settings.flags & flag; + ret = !!ret; + + return ret; +} + +void set_flag(unsigned int flag) +{ + settings.flags |= flag; +} + +void unset_flag(unsigned int flag) +{ + settings.flags &= ~flag; +} diff --git a/src/daemon/settings_private.h b/src/daemon/settings_private.h new file mode 100644 index 0000000..57ad24c --- /dev/null +++ b/src/daemon/settings_private.h @@ -0,0 +1,35 @@ +/* + * Usurpation – server daemon settings handling, private header + * + * Copyright (C) 2019 Gediminas Jakutis + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; version 2.1 + * of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef USURPATION_SETTINGS_PRIVATE_H +#define USURPATION_SETTINGS_PRIVATE_H + +static const unsigned int flag_daemonize = 1 << 0; /* 1st bit */ + +static struct settings { + unsigned int flags; + unsigned short int port; +} settings; + +int test_flag(unsigned int flag); +void set_flag(unsigned int flag); +void unset_flag(unsigned int flag); + +#endif /* USURPATION_SETTINGS_PRIVATE_H */ |