summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meson.build2
-rw-r--r--src/daemon/meson.build3
-rw-r--r--src/daemon/settings.c33
-rw-r--r--src/daemon/settings_private.h35
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 */