aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/util/env.h11
-rw-r--r--util/env.c38
-rw-r--r--util/meson.build1
3 files changed, 50 insertions, 0 deletions
diff --git a/include/util/env.h b/include/util/env.h
new file mode 100644
index 00000000..6720fa89
--- /dev/null
+++ b/include/util/env.h
@@ -0,0 +1,11 @@
+#ifndef UTIL_ENV_H
+#define UTIL_ENV_H
+
+#include <stdbool.h>
+#include <unistd.h>
+
+bool env_parse_bool(const char *option);
+
+ssize_t env_parse_switch(const char *option, const char **switches);
+
+#endif
diff --git a/util/env.c b/util/env.c
new file mode 100644
index 00000000..b0a9efda
--- /dev/null
+++ b/util/env.c
@@ -0,0 +1,38 @@
+#include <stdlib.h>
+#include <string.h>
+#include <wlr/util/log.h>
+#include "util/env.h"
+
+bool env_parse_bool(const char *option) {
+ const char *env = getenv(option);
+ if (env) {
+ wlr_log(WLR_INFO, "Loading %s option: %s", option, env);
+ }
+
+ if (!env || strcmp(env, "0") == 0) {
+ return false;
+ } else if (strcmp(env, "1") == 0) {
+ return true;
+ }
+
+ wlr_log(WLR_ERROR, "Unknown %s option: %s", option, env);
+ return false;
+}
+
+ssize_t env_parse_switch(const char *option, const char **switches) {
+ const char *env = getenv(option);
+ if (env) {
+ wlr_log(WLR_INFO, "Loading %s option: %s", option, env);
+ } else {
+ return 0;
+ }
+
+ for (ssize_t i = 0; switches[i]; i++) {
+ if (strcmp(env, switches[i]) == 0) {
+ return i;
+ }
+ }
+
+ wlr_log(WLR_ERROR, "Unknown %s option: %s", option, env);
+ return 0;
+}
diff --git a/util/meson.build b/util/meson.build
index 8933f2e7..34fc2e23 100644
--- a/util/meson.build
+++ b/util/meson.build
@@ -2,6 +2,7 @@ wlr_files += files(
'addon.c',
'array.c',
'box.c',
+ 'env.c',
'global.c',
'log.c',
'region.c',