Author: kevans
Date: Thu Jun 28 01:32:37 2018
New Revision: 335755
URL: https://svnweb.freebsd.org/changeset/base/335755

Log:
  MFC r334882, r334884-r334885: loader(8) boot flag <-> environment fixes
  
  r334882:
  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
  
  r334884:
  stand: Fix build after r334882
  
  Not sure how this was not caught in Universe.
  
  r334885:
  stand: One more trivial consolidation (setting environment from howto)

Modified:
  stable/11/stand/common/boot.c
  stable/11/stand/common/bootstrap.h
  stable/11/stand/common/metadata.c
  stable/11/stand/efi/loader/bootinfo.c
  stable/11/stand/efi/loader/main.c
  stable/11/stand/i386/libi386/bootinfo.c
  stable/11/stand/userboot/userboot/bootinfo.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/stand/common/boot.c
==============================================================================
--- stable/11/stand/common/boot.c       Thu Jun 28 01:30:03 2018        
(r335754)
+++ stable/11/stand/common/boot.c       Thu Jun 28 01:32:37 2018        
(r335755)
@@ -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,30 @@ 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);
+}
+
+void
+bootenv_set(int howto)
+{
+       int i;
+
+       for (i = 0; howto_names[i].ev != NULL; i++)
+               if (howto & howto_names[i].mask)
+                       setenv(howto_names[i].ev, "YES", 1);
 }
 
 static int

Modified: stable/11/stand/common/bootstrap.h
==============================================================================
--- stable/11/stand/common/bootstrap.h  Thu Jun 28 01:30:03 2018        
(r335754)
+++ stable/11/stand/common/bootstrap.h  Thu Jun 28 01:32:37 2018        
(r335755)
@@ -63,6 +63,8 @@ int   parse(int *argc, char ***argv, const char *str);
 /* boot.c */
 void   autoboot_maybe(void);
 int    getrootmount(char *rootdev);
+int    bootenv_flags(void);
+void   bootenv_set(int);
 
 /* misc.c */
 char   *unargv(int argc, char *argv[]);

Modified: stable/11/stand/common/metadata.c
==============================================================================
--- stable/11/stand/common/metadata.c   Thu Jun 28 01:30:03 2018        
(r335754)
+++ stable/11/stand/common/metadata.c   Thu Jun 28 01:32:37 2018        
(r335755)
@@ -31,9 +31,8 @@ __FBSDID("$FreeBSD$");
 
 #include <stand.h>
 #include <sys/param.h>
-#include <sys/reboot.h>
 #include <sys/linker.h>
-#include <sys/boot.h>
+#include <sys/reboot.h>
 #if defined(LOADER_FDT_SUPPORT)
 #include <fdt_platform.h>
 #endif
@@ -100,7 +99,6 @@ md_getboothowto(char *kargs)
     char       *cp;
     int                howto;
     int                active;
-    int                i;
 
     /* Parse kargs */
     howto = 0;
@@ -153,10 +151,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: stable/11/stand/efi/loader/bootinfo.c
==============================================================================
--- stable/11/stand/efi/loader/bootinfo.c       Thu Jun 28 01:30:03 2018        
(r335754)
+++ stable/11/stand/efi/loader/bootinfo.c       Thu Jun 28 01:32:37 2018        
(r335755)
@@ -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: stable/11/stand/efi/loader/main.c
==============================================================================
--- stable/11/stand/efi/loader/main.c   Thu Jun 28 01:30:03 2018        
(r335754)
+++ stable/11/stand/efi/loader/main.c   Thu Jun 28 01:32:37 2018        
(r335755)
@@ -31,7 +31,6 @@ __FBSDID("$FreeBSD$");
 #include <sys/disk.h>
 #include <sys/param.h>
 #include <sys/reboot.h>
-#include <sys/boot.h>
 #include <stdint.h>
 #include <stand.h>
 #include <string.h>
@@ -549,9 +548,8 @@ main(int argc, CHAR16 *argv[])
                        }
                }
        }
-       for (i = 0; howto_names[i].ev != NULL; i++)
-               if (howto & howto_names[i].mask)
-                       setenv(howto_names[i].ev, "YES", 1);
+
+       bootenv_set(howto);
 
        /*
         * XXX we need fallback to this stuff after looking at the ConIn, 
ConOut and ConErr variables

Modified: stable/11/stand/i386/libi386/bootinfo.c
==============================================================================
--- stable/11/stand/i386/libi386/bootinfo.c     Thu Jun 28 01:30:03 2018        
(r335754)
+++ stable/11/stand/i386/libi386/bootinfo.c     Thu Jun 28 01:32:37 2018        
(r335755)
@@ -31,7 +31,6 @@ __FBSDID("$FreeBSD$");
 #include <sys/param.h>
 #include <sys/reboot.h>
 #include <sys/linker.h>
-#include <sys/boot.h>
 #include "bootstrap.h"
 #include "libi386.h"
 #include "btxv86.h"
@@ -43,7 +42,6 @@ bi_getboothowto(char *kargs)
     char       *curpos, *next, *string;
     int                howto;
     int                active;
-    int                i;
     int                vidconsole;
 
     /* Parse kargs */
@@ -96,10 +94,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"));
@@ -134,11 +129,8 @@ bi_getboothowto(char *kargs)
 void
 bi_setboothowto(int howto)
 {
-    int                i;
 
-    for (i = 0; howto_names[i].ev != NULL; i++)
-       if (howto & howto_names[i].mask)
-           setenv(howto_names[i].ev, "YES", 1);
+    bootenv_set(howto);
 }
 
 /*

Modified: stable/11/stand/userboot/userboot/bootinfo.c
==============================================================================
--- stable/11/stand/userboot/userboot/bootinfo.c        Thu Jun 28 01:30:03 
2018        (r335754)
+++ stable/11/stand/userboot/userboot/bootinfo.c        Thu Jun 28 01:32:37 
2018        (r335755)
@@ -31,7 +31,6 @@ __FBSDID("$FreeBSD$");
 #include <sys/param.h>
 #include <sys/reboot.h>
 #include <sys/linker.h>
-#include <sys/boot.h>
 
 #include "bootstrap.h"
 #include "libuserboot.h"
@@ -43,7 +42,6 @@ bi_getboothowto(char *kargs)
     char       *curpos, *next, *string;
     int                howto;
     int                active;
-    int                i;
     int                vidconsole;
 
     /* Parse kargs */
@@ -96,11 +94,9 @@ 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"));
     vidconsole = 0;
@@ -134,11 +130,8 @@ bi_getboothowto(char *kargs)
 void
 bi_setboothowto(int howto)
 {
-    int                i;
 
-    for (i = 0; howto_names[i].ev != NULL; i++)
-       if (howto & howto_names[i].mask)
-           setenv(howto_names[i].ev, "YES", 1);
+    bootenv_set(howto);
 }
 
 /*
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to