summaryrefslogtreecommitdiff
path: root/src/core/show-status.c
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2018-07-23 21:55:26 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2018-07-23 21:55:26 +0900
commit7a293242e07961ce957a1c8325f4352f9611c40b (patch)
treec37c469074379f67f9abe1c6e4540a9dcf6e5c2f /src/core/show-status.c
parent46f2579c2ac9f6780d5afec1000764defc6b581e (diff)
downloadsystemd-7a293242e07961ce957a1c8325f4352f9611c40b.tar.gz
core: normalize ShowStatus
Diffstat (limited to 'src/core/show-status.c')
-rw-r--r--src/core/show-status.c26
1 files changed, 15 insertions, 11 deletions
diff --git a/src/core/show-status.c b/src/core/show-status.c
index fd9aeb9416..9e5e7a50b9 100644
--- a/src/core/show-status.c
+++ b/src/core/show-status.c
@@ -5,26 +5,30 @@
#include "io-util.h"
#include "parse-util.h"
#include "show-status.h"
+#include "string-table.h"
#include "string-util.h"
#include "terminal-util.h"
#include "util.h"
+static const char* const show_status_table[] = {
+ [SHOW_STATUS_NO] = "no",
+ [SHOW_STATUS_AUTO] = "auto",
+ [SHOW_STATUS_TEMPORARY] = "temporary",
+ [SHOW_STATUS_YES] = "yes",
+};
+
+DEFINE_STRING_TABLE_LOOKUP_WITH_BOOLEAN(show_status, ShowStatus, SHOW_STATUS_YES);
+
int parse_show_status(const char *v, ShowStatus *ret) {
- int r;
+ ShowStatus s;
- assert(v);
assert(ret);
- if (streq(v, "auto")) {
- *ret = SHOW_STATUS_AUTO;
- return 0;
- }
-
- r = parse_boolean(v);
- if (r < 0)
- return r;
+ s = show_status_from_string(v);
+ if (s < 0 || s == SHOW_STATUS_TEMPORARY)
+ return -EINVAL;
- *ret = r ? SHOW_STATUS_YES : SHOW_STATUS_NO;
+ *ret = s;
return 0;
}