Module Name: src
Committed By: thorpej
Date: Mon Jan 8 05:09:41 UTC 2024
Modified Files:
src/sys/arch/virt68k/include: bootinfo.h
src/sys/arch/virt68k/virt68k: bootinfo.c
Log Message:
Add bootinfo_getarg(), which gets the name kernel command line argument
and returns its value (sort of like getenv()).
To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/virt68k/include/bootinfo.h
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/virt68k/virt68k/bootinfo.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/virt68k/include/bootinfo.h
diff -u src/sys/arch/virt68k/include/bootinfo.h:1.4 src/sys/arch/virt68k/include/bootinfo.h:1.5
--- src/sys/arch/virt68k/include/bootinfo.h:1.4 Sat Jan 6 17:32:40 2024
+++ src/sys/arch/virt68k/include/bootinfo.h Mon Jan 8 05:09:41 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: bootinfo.h,v 1.4 2024/01/06 17:32:40 thorpej Exp $ */
+/* $NetBSD: bootinfo.h,v 1.5 2024/01/08 05:09:41 thorpej Exp $ */
/*-
* Copyright (c) 2023 The NetBSD Foundation, Inc.
@@ -156,6 +156,7 @@ bool bootinfo_addr_is_console(paddr_t)
void bootinfo_setup_initrd(void);
void bootinfo_setup_rndseed(void);
+bool bootinfo_getarg(const char *, char *, size_t);
void bootinfo_md_cnattach(void (*)(bus_space_tag_t,
bus_space_handle_t),
Index: src/sys/arch/virt68k/virt68k/bootinfo.c
diff -u src/sys/arch/virt68k/virt68k/bootinfo.c:1.5 src/sys/arch/virt68k/virt68k/bootinfo.c:1.6
--- src/sys/arch/virt68k/virt68k/bootinfo.c:1.5 Sat Jan 6 21:40:41 2024
+++ src/sys/arch/virt68k/virt68k/bootinfo.c Mon Jan 8 05:09:41 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: bootinfo.c,v 1.5 2024/01/06 21:40:41 thorpej Exp $ */
+/* $NetBSD: bootinfo.c,v 1.6 2024/01/08 05:09:41 thorpej Exp $ */
/*-
* Copyright (c) 2023 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bootinfo.c,v 1.5 2024/01/06 21:40:41 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bootinfo.c,v 1.6 2024/01/08 05:09:41 thorpej Exp $");
#include "opt_md.h"
@@ -426,3 +426,49 @@ bootinfo_setup_rndseed(void)
explicit_memset(rnd->data_bytes, 0, rnd->data_length);
}
}
+
+/*
+ * bootinfo_getarg --
+ * Get an argument from the BI_COMMAND_LINE bootinfo record.
+ */
+bool
+bootinfo_getarg(const char *var, char *buf, size_t buflen)
+{
+ const size_t varlen = strlen(var);
+ struct bi_record *bi = bootinfo_find(BI_COMMAND_LINE);
+
+ if (bi == NULL) {
+ return false;
+ }
+
+ const char *sp = bootinfo_dataptr(bi);
+ const char *osp = sp;
+ for (;;) {
+ sp = strstr(sp, var);
+ if (sp == NULL) {
+ return false;
+ }
+
+ if (sp != osp &&
+ sp[-1] != ' ' && sp[-1] != '\t' && sp[-1] != '-') {
+ continue;
+ }
+ sp += varlen;
+ char ch = *sp++;
+ if (ch != '=' && ch != ' ' && ch != '\t' && ch != '\0') {
+ continue;
+ }
+ /* Found it. */
+ break;
+ }
+
+ while (--buflen) {
+ if (*sp == ' ' || *sp == '\t' || *sp == '\0') {
+ break;
+ }
+ *buf++ = *sp++;
+ }
+ *buf = '\0';
+
+ return true;
+}