summaryrefslogtreecommitdiffstats
path: root/boot/cmdline.c
diff options
context:
space:
mode:
authorJon Santmyer <jon@jonsantmyer.com>2026-09-04 11:31:40 -0400
committerJon Santmyer <jon@jonsantmyer.com>2026-09-04 11:31:40 -0400
commit8251da342161767fe203627223ccd4a7026701c6 (patch)
treeaf2db0f11b0ea8ad35f88663a855bab39a80f679 /boot/cmdline.c
downloadjove-kernel-8251da342161767fe203627223ccd4a7026701c6.tar.gz
jove-kernel-8251da342161767fe203627223ccd4a7026701c6.tar.bz2
jove-kernel-8251da342161767fe203627223ccd4a7026701c6.zip
initial commit. working on tasking
Diffstat (limited to 'boot/cmdline.c')
-rw-r--r--boot/cmdline.c65
1 files changed, 65 insertions, 0 deletions
diff --git a/boot/cmdline.c b/boot/cmdline.c
new file mode 100644
index 0000000..06a6169
--- /dev/null
+++ b/boot/cmdline.c
@@ -0,0 +1,65 @@
+#include "config.h"
+#include "cmdline.h"
+#include <stddef.h>
+#include "lib/string.h"
+#include "lib/printf.h"
+
+const char *s_cmdline = NULL;
+
+struct kvpair
+{
+ const char *key, *value;
+} s_arguments[CMDLINE_MAX_ARGUMENTS] = { 0 };
+size_t s_numargs = 0;
+
+void
+cmdline_init(char *cmdline)
+{
+ s_cmdline = cmdline;
+ size_t last_arg = 0;
+ const char *arg = cmdline;
+
+ for(char *s = cmdline; *s; s++) {
+ if(*s == '=') {
+ *(s++) = 0;
+ s_arguments[last_arg].key = arg;
+ arg = s;
+ for(; *s && (*s != ' '); s++) {
+ if(*s == '"') {
+ s++;
+ for(; *s && (*s != '"'); s++);
+ s++;
+ }
+ }
+ *(s++) = 0;
+ s_arguments[last_arg++].value = arg;
+ arg = s;
+ }
+ }
+ s_numargs = last_arg;
+}
+
+void
+cmdline_print()
+{
+ for(size_t i = 0; i < s_numargs; i++) {
+ const char *arg_key = s_arguments[i].key;
+ const char *arg_value = s_arguments[i].value;
+
+ kprintf("cmdline: %s=%s\n", arg_key, arg_value);
+ }
+}
+
+const char*
+cmdline_getarg(const char *key)
+{
+ for(size_t i = 0; i < s_numargs; i++) {
+ const char *arg_key = s_arguments[i].key;
+ const char *arg_value = s_arguments[i].value;
+
+ if(strncmp(arg_key, key, strlen(arg_key)) == 0) {
+ return arg_value;
+ }
+ }
+ return NULL;
+}