Author: bcran
Date: Mon Dec 31 00:09:45 2018
New Revision: 342635
URL: https://svnweb.freebsd.org/changeset/base/342635

Log:
  Change the way efibootmgr works by specifying bootnum via -b parameter
  
  Instead of passing the bootnum to each different parameter, require users
  to specify -b when running operations that need a bootnum.
  
  This allows activation of a new boot entry at the same time it's created
  by adding -a onto the command line.
  
  Sponsored by: Netflix
  Differential Revision:        https://reviews.freebsd.org/D18648

Modified:
  head/usr.sbin/efibootmgr/efibootmgr.c

Modified: head/usr.sbin/efibootmgr/efibootmgr.c
==============================================================================
--- head/usr.sbin/efibootmgr/efibootmgr.c       Sun Dec 30 23:08:06 2018        
(r342634)
+++ head/usr.sbin/efibootmgr/efibootmgr.c       Mon Dec 31 00:09:45 2018        
(r342635)
@@ -1,5 +1,5 @@
 /*-
- * Copyright (c) 2017 Netflix, Inc.
+ * Copyright (c) 2017-2018 Netflix, Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -94,16 +94,16 @@ typedef struct _bmgr_opts {
 } bmgr_opts_t;
 
 static struct option lopts[] = {
-       {"activate", required_argument, NULL, 'a'},
-       {"bootnext", required_argument, NULL, 'n'}, /* set bootnext */
+       {"activate", no_argument, NULL, 'a'},
+       {"bootnext", no_argument, NULL, 'n'}, /* set bootnext */
        {"bootnum", required_argument, NULL, 'b'},
        {"bootorder", required_argument, NULL, 'o'}, /* set order */
        {"copy", required_argument, NULL, 'C'},         /* Copy boot method */
        {"create", no_argument, NULL, 'c'},
-       {"deactivate", required_argument, NULL, 'A'},
+       {"deactivate", no_argument, NULL, 'A'},
        {"del-timout", no_argument, NULL, 'T'},
-       {"delete", required_argument, NULL, 'B'},
-       {"delete-bootnext", required_argument, NULL, 'N'},
+       {"delete", no_argument, NULL, 'B'},
+       {"delete-bootnext", no_argument, NULL, 'N'},
        {"dry-run", no_argument, NULL, 'D'},
        {"env", required_argument, NULL, 'e'},
        {"help", no_argument, NULL, 'h'},
@@ -171,37 +171,35 @@ set_bootvar(const char *name, uint8_t *data, size_t si
 
 
 #define USAGE \
-       "   [-aAnNB Bootvar] [-t timeout] [-T] [-o bootorder] [-O] [--verbose] 
[--help] \n\
-  [-c -l loader [-k kernel ] [-L label] [--dry-run] [-b Bootvar]]"
+       "   [-aAnB -b bootnum] [-N] [-t timeout] [-T] [-o bootorder] [-O] 
[--verbose] [--help]\n\
+  [-c -l loader [-k kernel] [-L label] [--dry-run] [-b bootnum]]"
 
 #define CREATE_USAGE \
-       "       efibootmgr -c -l loader [-k kernel] [-L label] [--dry-run]"
+       "       efibootmgr -c -l loader [-k kernel] [-L label] [--dry-run] [-b 
bootnum] [-a]"
 #define ORDER_USAGE \
        "       efibootmgr -o bootvarnum1,bootvarnum2,..."
 #define TIMEOUT_USAGE \
        "       efibootmgr -t seconds"
 #define DELETE_USAGE \
-       "       efibootmgr -B bootvarnum"
+       "       efibootmgr -B -b bootnum"
 #define ACTIVE_USAGE \
-       "       efibootmgr [-a | -A] bootvarnum"
+       "       efibootmgr [-a | -A] -b bootnum"
 #define BOOTNEXT_USAGE \
-       "       efibootmgr [-n | -N] bootvarnum"
+       "       efibootmgr [-n | -N] -b bootnum"
 
 static void
 parse_args(int argc, char *argv[])
 {
        int ch;
 
-       while ((ch = getopt_long(argc, argv, "A:a:B:b:C:cDe:hk:L:l:Nn:Oo:Tt:v",
+       while ((ch = getopt_long(argc, argv, "AaBb:C:cDe:hk:L:l:NnOo:Tt:v",
                    lopts, NULL)) != -1) {
                switch (ch) {
                case 'A':
                        opts.set_inactive = true;
-                       opts.bootnum = strtoul(optarg, NULL, 16);
                        break;
                case 'a':
                        opts.set_active = true;
-                       opts.bootnum = strtoul(optarg, NULL, 16);
                        break;
                case 'b':
                        opts.has_bootnum = true;
@@ -209,7 +207,6 @@ parse_args(int argc, char *argv[])
                        break;
                case 'B':
                        opts.delete = true;
-                       opts.bootnum = strtoul(optarg, NULL, 16);
                        break;
                case 'C':
                        opts.copy = true;
@@ -246,7 +243,6 @@ parse_args(int argc, char *argv[])
                        break;
                case 'n':
                        opts.set_bootnext = true;
-                       opts.bootnum = strtoul(optarg, NULL, 16);
                        break;
                case 'O':
                        opts.once = true;
@@ -275,6 +271,15 @@ parse_args(int argc, char *argv[])
 
        if (opts.order && !(opts.order))
                errx(1, "%s", ORDER_USAGE);
+
+       if ((opts.set_inactive || opts.set_active) && !opts.has_bootnum)
+               errx(1, "%s", ACTIVE_USAGE);
+
+       if (opts.delete && !opts.has_bootnum)
+               errx(1, "%s", DELETE_USAGE);
+
+       if (opts.set_bootnext && !opts.has_bootnum)
+               errx(1, "%s", BOOTNEXT_USAGE);
 }
 
 
_______________________________________________
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