Page MenuHomeFreeBSD

D18705.id52462.diff
No OneTemporary

D18705.id52462.diff

Index: usr.sbin/efibootmgr/efibootmgr.8
===================================================================
--- usr.sbin/efibootmgr/efibootmgr.8
+++ usr.sbin/efibootmgr/efibootmgr.8
@@ -24,20 +24,37 @@
.\"
.\" $FreeBSD$
.\"
-.Dd December 28, 2018
+.Dd January 1, 2019
.Dt EFIBOOTMGR 8
.Os
.Sh NAME
-.Nm efibootmgr
+.Nm efibootmgr
.Nd manipulate the EFI Boot Manager
.Sh SYNOPSIS
-.Op Fl aAnNB
-.Op Fl b Ar bootnum
-.Op Fl t Ar timeout
-.Op Fl T
-.Op Fl o Ar bootorder
+.Nm
.Op Fl v
-.Op Fl c l Ar loader [ Fl k Ar kernel ] [ Fl L Ar label ] [ Fl -dry-run ]
+.Nm
+.Fl c
+.Fl l Ar loader
+.Op Fl aD
+.Op Fl b Ar bootnum
+.Op Fl k Ar kernel
+.Op Fl L Ar label
+.Nm
+.Fl B
+.Fl b Ar bootnum
+.Nm
+.Brq Fl a Ns | Ns Fl A
+.Fl b Ar bootnum
+.Nm
+.Brq Fl n Ns | Ns Fl N
+.Fl b Ar bootnum
+.Nm
+.Fl o Ar bootvarnum1 Ns , Ns Ar bootvarnum2 Ns , Ns Ar ...
+.Nm
+.Fl t Ar seconds
+.Nm
+.Fl T
.Sh "DESCRIPTION"
.Nm
manipulates how UEFI Boot Managers boot the system.
Index: usr.sbin/efibootmgr/efibootmgr.c
===================================================================
--- usr.sbin/efibootmgr/efibootmgr.c
+++ usr.sbin/efibootmgr/efibootmgr.c
@@ -58,6 +58,8 @@
#include <efichar.h>
#include <efivar-dp.h>
+extern const char *__progname;
+
#ifndef LOAD_OPTION_ACTIVE
#define LOAD_OPTION_ACTIVE 0x00000001
#endif
@@ -169,23 +171,45 @@
COMMON_ATTRS);
}
+typedef enum {
+ EBM_LIST,
+ EBM_CREATE,
+ EBM_DELETE,
+ EBM_ACTIVE,
+ EBM_BOOTNEXT,
+ EBM_ORDER,
+ EBM_TIMEOUT_SET,
+ EBM_TIMEOUT_DELETE
+} ebm_usage_t;
+static const char * const ebm_usage[] = {
+ [EBM_LIST] = "[-v]",
+ [EBM_CREATE] = "-c -l loader [-aD] [-b bootnum] [-k kernel] [-L label]",
+ [EBM_DELETE] = "-B -b bootnum",
+ [EBM_ACTIVE] = "{-a|-A} -b bootnum",
+ [EBM_BOOTNEXT] = "{-n|-N} -b bootnum",
+ [EBM_ORDER] = "-o bootvarnum1,bootvarnum2,...",
+ [EBM_TIMEOUT_SET] = "-t seconds",
+ [EBM_TIMEOUT_DELETE] = "-T"
+};
+
+static void
+usage(bool help, ebm_usage_t unum)
+{
+ FILE *s = help ? stdout : stderr;
+
+ fprintf(s, "Usage:\n");
-#define USAGE \
- " [-aAnB -b bootnum] [-N] [-t timeout] [-T] [-o bootorder] [-O] [--verbose] [--help]\n\
- [-c -l loader [-k kernel] [-L label] [--dry-run] [-b bootnum]]"
+ if (unum >= 0 && unum < nitems(ebm_usage))
+ fprintf(s, "\t%s %s\n", __progname, ebm_usage[unum]);
+ else {
+ ebm_usage_t i;
-#define CREATE_USAGE \
- " 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 -b bootnum"
-#define ACTIVE_USAGE \
- " efibootmgr [-a | -A] -b bootnum"
-#define BOOTNEXT_USAGE \
- " efibootmgr [-n | -N] -b bootnum"
+ for (i = 0; i < nitems(ebm_usage); i++)
+ fprintf(s, "\t%s %s\n", __progname, ebm_usage[i]);
+ }
+
+ exit (help ? 0 : 1);
+}
static void
parse_args(int argc, char *argv[])
@@ -222,8 +246,7 @@
opts.env = strdup(optarg);
break;
case 'h':
- default:
- errx(1, "%s", USAGE);
+ usage(true, -1);
break;
case 'k':
free(opts.kernel);
@@ -261,25 +284,28 @@
case 'v':
opts.verbose = true;
break;
+ default:
+ usage(false, -1);
+ break;
}
}
if (opts.create) {
if (!opts.loader)
- errx(1, "%s",CREATE_USAGE);
+ usage(false, EBM_CREATE);
return;
}
if (opts.order && !(opts.order))
- errx(1, "%s", ORDER_USAGE);
+ usage(false, EBM_ORDER);
if ((opts.set_inactive || opts.set_active) && !opts.has_bootnum)
- errx(1, "%s", ACTIVE_USAGE);
+ usage(false, EBM_ACTIVE);
if (opts.delete && !opts.has_bootnum)
- errx(1, "%s", DELETE_USAGE);
+ usage(false, EBM_DELETE);
if (opts.set_bootnext && !opts.has_bootnum)
- errx(1, "%s", BOOTNEXT_USAGE);
+ usage(false, EBM_BOOTNEXT);
}
@@ -344,13 +370,13 @@
new_data[i] = strtoul(next, NULL, 16);
if (new_data[i] == 0 && errno == EINVAL) {
warnx("can't parse %s as a numb", next);
- errx(1, "%s", ORDER_USAGE);
+ usage(false, EBM_ORDER);
}
i++;
}
free(cp);
if (set_bootvar("BootOrder", (uint8_t*)new_data, size) < 0)
- err(1, "Unabke to set BootOrder to %s", order);
+ err(1, "Unable to set BootOrder to %s", order);
free(new_data);
}

File Metadata

Mime Type
text/plain
Expires
Fri, Nov 28, 8:33 AM (7 h, 45 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
26278712
Default Alt Text
D18705.id52462.diff (4 KB)

Event Timeline