Author: kevans
Date: Sat Jun  9 15:10:39 2018
New Revision: 334882
URL: https://svnweb.freebsd.org/changeset/base/334882

Log:
  stand: Consolidate checking for boot flags driven by environment vars
  
  e.g. boot_mute, boot_single, boot_verbose, and friends; we checked for these
  in multiple places, consolidate into common/ and allow a setting of "NO" for
  any of these to turn them off. This allows systems with multiple
  loader.conf(5) or loader.conf(5) overlay systems to easily turn off
  variables in later processed files by setting it to NO.
  
  Reported by:  Nick Wolff @ iXsystems
  Reviewed by:  imp

Modified:
  head/stand/common/boot.c
  head/stand/common/bootstrap.h
  head/stand/common/metadata.c
  head/stand/efi/loader/bootinfo.c
  head/stand/i386/libi386/bootinfo.c
  head/stand/userboot/userboot/bootinfo.c

Modified: head/stand/common/boot.c
==============================================================================
--- head/stand/common/boot.c    Sat Jun  9 14:50:38 2018        (r334881)
+++ head/stand/common/boot.c    Sat Jun  9 15:10:39 2018        (r334882)
@@ -32,6 +32,8 @@ __FBSDID("$FreeBSD$");
  */
 
 #include <stand.h>
+#include <sys/reboot.h>
+#include <sys/boot.h>
 #include <string.h>
 
 #include "bootstrap.h"
@@ -156,6 +158,20 @@ autoboot_maybe()
        cp = getenv("autoboot_delay");
        if ((autoboot_tried == 0) && ((cp == NULL) || strcasecmp(cp, "NO")))
                autoboot(-1, NULL);             /* try to boot automatically */
+}
+
+int
+bootenv_flags()
+{
+       int i, howto;
+       char *val;
+
+       for (howto = 0, i = 0; howto_names[i].ev != NULL; i++) {
+               val = getenv(howto_names[i].ev);
+               if (val != NULL && strcasecmp(val, "no") != 0)
+                       howto |= howto_names[i].mask;
+       }
+       return (howto);
 }
 
 static int

Modified: head/stand/common/bootstrap.h
==============================================================================
--- head/stand/common/bootstrap.h       Sat Jun  9 14:50:38 2018        
(r334881)
+++ head/stand/common/bootstrap.h       Sat Jun  9 15:10:39 2018        
(r334882)
@@ -63,6 +63,7 @@ int   parse(int *argc, char ***argv, const char *str);
 /* boot.c */
 void   autoboot_maybe(void);
 int    getrootmount(char *rootdev);
+int    bootenv_flags(void);
 
 /* misc.c */
 char   *unargv(int argc, char *argv[]);

Modified: head/stand/common/metadata.c
==============================================================================
--- head/stand/common/metadata.c        Sat Jun  9 14:50:38 2018        
(r334881)
+++ head/stand/common/metadata.c        Sat Jun  9 15:10:39 2018        
(r334882)
@@ -31,9 +31,7 @@ __FBSDID("$FreeBSD$");
 
 #include <stand.h>
 #include <sys/param.h>
-#include <sys/reboot.h>
 #include <sys/linker.h>
-#include <sys/boot.h>
 #if defined(LOADER_FDT_SUPPORT)
 #include <fdt_platform.h>
 #endif
@@ -100,7 +98,6 @@ md_getboothowto(char *kargs)
     char       *cp;
     int                howto;
     int                active;
-    int                i;
 
     /* Parse kargs */
     howto = 0;
@@ -153,10 +150,7 @@ md_getboothowto(char *kargs)
        }
     }
 
-    /* get equivalents from the environment */
-    for (i = 0; howto_names[i].ev != NULL; i++)
-       if (getenv(howto_names[i].ev) != NULL)
-           howto |= howto_names[i].mask;
+    howto |= bootenv_flags();
 #if defined(__sparc64__)
     if (md_bootserial() != -1)
        howto |= RB_SERIAL;

Modified: head/stand/efi/loader/bootinfo.c
==============================================================================
--- head/stand/efi/loader/bootinfo.c    Sat Jun  9 14:50:38 2018        
(r334881)
+++ head/stand/efi/loader/bootinfo.c    Sat Jun  9 15:10:39 2018        
(r334882)
@@ -32,9 +32,8 @@ __FBSDID("$FreeBSD$");
 #include <stand.h>
 #include <string.h>
 #include <sys/param.h>
-#include <sys/reboot.h>
 #include <sys/linker.h>
-#include <sys/boot.h>
+#include <sys/reboot.h>
 #include <machine/cpufunc.h>
 #include <machine/elf.h>
 #include <machine/metadata.h>
@@ -72,15 +71,9 @@ bi_getboothowto(char *kargs)
        const char *sw;
        char *opts;
        char *console;
-       int howto, i;
+       int howto;
 
-       howto = 0;
-
-       /* Get the boot options from the environment first. */
-       for (i = 0; howto_names[i].ev != NULL; i++) {
-               if (getenv(howto_names[i].ev) != NULL)
-                       howto |= howto_names[i].mask;
-       }
+       howto = bootenv_flags();
 
        console = getenv("console");
        if (console != NULL) {

Modified: head/stand/i386/libi386/bootinfo.c
==============================================================================
--- head/stand/i386/libi386/bootinfo.c  Sat Jun  9 14:50:38 2018        
(r334881)
+++ head/stand/i386/libi386/bootinfo.c  Sat Jun  9 15:10:39 2018        
(r334882)
@@ -43,7 +43,6 @@ bi_getboothowto(char *kargs)
     char       *curpos, *next, *string;
     int                howto;
     int                active;
-    int                i;
     int                vidconsole;
 
     /* Parse kargs */
@@ -96,10 +95,7 @@ bi_getboothowto(char *kargs)
            cp++;
        }
     }
-    /* get equivalents from the environment */
-    for (i = 0; howto_names[i].ev != NULL; i++)
-       if (getenv(howto_names[i].ev) != NULL)
-           howto |= howto_names[i].mask;
+    howto |= bootenv_flags();
 
     /* Enable selected consoles */
     string = next = strdup(getenv("console"));

Modified: head/stand/userboot/userboot/bootinfo.c
==============================================================================
--- head/stand/userboot/userboot/bootinfo.c     Sat Jun  9 14:50:38 2018        
(r334881)
+++ head/stand/userboot/userboot/bootinfo.c     Sat Jun  9 15:10:39 2018        
(r334882)
@@ -43,7 +43,6 @@ bi_getboothowto(char *kargs)
     char       *curpos, *next, *string;
     int                howto;
     int                active;
-    int                i;
     int                vidconsole;
 
     /* Parse kargs */
@@ -96,10 +95,8 @@ bi_getboothowto(char *kargs)
            cp++;
        }
     }
-    /* get equivalents from the environment */
-    for (i = 0; howto_names[i].ev != NULL; i++)
-       if (getenv(howto_names[i].ev) != NULL)
-           howto |= howto_names[i].mask;
+
+    howto |= bootenv_flags();
 
     /* Enable selected consoles */
     string = next = strdup(getenv("console"));
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to