X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/64e5fa9a495e388c922157b9a616204c299f5e05..cbc8fdbfe473e23e19690204418e19999a9522d1:/lunaix-os/kernel/kcmd.c diff --git a/lunaix-os/kernel/kcmd.c b/lunaix-os/kernel/kcmd.c index dc06c18..2afe9a0 100644 --- a/lunaix-os/kernel/kcmd.c +++ b/lunaix-os/kernel/kcmd.c @@ -34,6 +34,10 @@ extract_next_option(struct extractor* ctx) s->len = 0; s->pos = i; + if (!ctx->cmdline[i]) { + return false; + } + while((c = ctx->cmdline[i++])) { if (c == ' ') { while ((c = ctx->cmdline[i++]) && c == ' '); @@ -50,21 +54,17 @@ extract_next_option(struct extractor* ctx) state = PARSE_VAL; s = &ctx->val; s->len = 0; - s->pos = i + 1; + s->pos = i; continue; } } - while ((c = ctx->cmdline[i++]) && c != ' ') { - s->len++; - } - - i--; + s->len++; } - ctx->pos = i; + ctx->pos = i - 1; - return !!c; + return true; } #define MAX_KEYSIZE 16 @@ -74,7 +74,12 @@ kcmd_parse_cmdline(char* cmd_line) { struct extractor ctx = { .cmdline = cmd_line, .pos = 0 }; - while(extract_next_option(&ctx)) { + INFO("active kcmds"); + + // first option is always kernel itself + extract_next_option(&ctx); + + while (extract_next_option(&ctx)) { if (!ctx.key.len) { continue; } @@ -96,6 +101,9 @@ kcmd_parse_cmdline(char* cmd_line) memcpy(kopt->buf, &cmd_line[ctx.key.pos], ctx.key.len); + kopt->hashkey = HSTR(kopt->buf, ctx.key.len); + hstr_rehash(&kopt->hashkey, HSTR_FULL_HASH); + if (ctx.val.len) { kopt->value = &kopt->buf[ctx.key.len + 1]; size_t max_val_len = maxlen - ctx.key.len; @@ -106,11 +114,12 @@ kcmd_parse_cmdline(char* cmd_line) } memcpy(kopt->value, &cmd_line[ctx.val.pos], ctx.val.len); + INFO(" %-10s =%s", kopt->hashkey.value, kopt->value); + } + else { + INFO(" %s", kopt->hashkey.value); } - kopt->hashkey = HSTR(kopt->buf, ctx.key.len); - hstr_rehash(&kopt->hashkey, HSTR_FULL_HASH); - hashtable_hash_in(options, &kopt->node, kopt->hashkey.hash); } }