From 8251da342161767fe203627223ccd4a7026701c6 Mon Sep 17 00:00:00 2001 From: Jon Santmyer Date: Fri, 4 Sep 2026 11:31:40 -0400 Subject: initial commit. working on tasking --- boot/cmdline.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 boot/cmdline.c (limited to 'boot/cmdline.c') 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 +#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; +} -- cgit v1.2.3