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;
+}

Reply via email to