summaryrefslogtreecommitdiffstats
path: root/src/keywords.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/keywords.c')
-rw-r--r--src/keywords.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/keywords.c b/src/keywords.c
new file mode 100644
index 0000000..12393bd
--- /dev/null
+++ b/src/keywords.c
@@ -0,0 +1,31 @@
+#include "keywords.h"
+
+#include <libubox/utils.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+static const char *const keywords[] = {
+
+#define KW(kw) #kw,
+#include "keywords.def"
+#undef KW
+
+};
+
+static int compare_keywords(const void *a, const void *b) {
+ const char *const *ea = a, *const *eb = b;
+ return strcmp(*ea, *eb);
+}
+
+keyword_t lookup_keyword(const char *keyword) {
+ const char *const *entry = bsearch(
+ &keyword, keywords, ARRAY_SIZE(keywords), sizeof(const char *),
+ compare_keywords
+ );
+
+ if (!entry)
+ return UNKNOWN_KEYWORD;
+
+ return (keyword_t) (entry - keywords + 1);
+}