diff options
| author | Jon Santmyer <jon@jonsantmyer.com> | 2026-09-04 11:31:40 -0400 |
|---|---|---|
| committer | Jon Santmyer <jon@jonsantmyer.com> | 2026-09-04 11:31:40 -0400 |
| commit | 8251da342161767fe203627223ccd4a7026701c6 (patch) | |
| tree | af2db0f11b0ea8ad35f88663a855bab39a80f679 /boot/cmdline.c | |
| download | jove-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.c | 65 |
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; +} |
