diff options
authorWarner Losh <imp@FreeBSD.org>2017-03-09 00:31:36 +0000
committerWarner Losh <imp@FreeBSD.org>2017-03-09 00:31:36 +0000
commit2f2f5c6728faaff4697e5cb7342c7240d0b4aec2 (patch)
parent7270962aa54e4647b841f9ae2fd1989de8048a76 (diff)
Finish implementing -d/--device/--device-path flag to print variable
as if it were a device path. Remove language about a=b syntax on the command line. This will not be implemented due to its limited usefulness. UEFI variables are binary blobs, on the whole, and a simple work around exists for strings. Clarify that the new value of the variable is taken from stdin. Update manual with history. Sponsored by: Netflix
Notes: svn path=/head/; revision=314927
2 files changed, 37 insertions, 16 deletions
diff --git a/usr.sbin/efivar/efivar.8 b/usr.sbin/efivar/efivar.8
index 965527e634e7..e8a3a9f190bc 100644
--- a/usr.sbin/efivar/efivar.8
+++ b/usr.sbin/efivar/efivar.8
@@ -1,4 +1,4 @@
-.\" Copyright (c) 2003 Netflix, Inc
+.\" Copyright (c) 2017 Netflix, Inc
.\" All rights reserved.
.\" Redistribution and use in source and binary forms, with or without
@@ -24,7 +24,7 @@
.\" $FreeBSD$
-.Dd September 29, 2016
+.Dd March 4, 2017
@@ -40,6 +40,7 @@
.Op Fl -attributes
.Op Fl -binary
.Op Fl -delete
+.Op Fl -device-path
.Op Fl -fromfile Ar file
.Op Fl -guid
.Op Fl -hex
@@ -51,7 +52,6 @@
.Op Fl -print-decimal
.Op Fl -raw-guid
.Op Fl -write
-.Ar name Ns Op = Ns Ar value
This program manages
.Dq Unified Extensible Firmware Interface
@@ -117,6 +117,9 @@ flags.
.Ar value
may be specified.
+.It Fl d Fl -device Fl -device-path
+Interpret the variables printed as UEFI device paths and print the
+UEFI standard string representation.
.It Fl g Fl -guid
flag is specified, guids are converted to names if they are known (and
show up in
@@ -138,33 +141,45 @@ flag is also listed, their values will be displayed.
Do not display the variable name.
.It Fl p Fl -print
Print the value of the variable.
-.It Fl d Fl -print-decimal
-Treat the value of the variable as a number and print it as a
-This is currently unimplemented.
.It Fl R Fl -raw-guid
Do not substitute well known names for GUID numeric values in output.
.It Fl w Fl -write
-Write (replace) the variable specified with the value specified.
+Write (replace) the variable specified with the value specified from
+standard input.
+No command line option to do this is available since UEFI variables
+are binary structures rather than strings.
+.Xr echo 1
+.Fl n
+can be used to specify simple strings.
.It Ar name
Display the
.Ar name
environment variable.
-.It Ar name Ns = Ns Ar value
-Set the specified
-.Ar name
-.Ar value .
-This is not yet implemented.
-If the
program is intended to be compatible (strict superset) with a progam
of the same name included in the Red Hat libefivar package.
+Except the
+.Fl d
+.Fl -print-decimal
+flags are not implmenented and never will be.
+.Fl d
+flag is a short-hand for
+.Fl -device-path .
Appendix A of the UEFI specification has the format for GUIDs.
.Dq Globally Unique Identifiers
have the format described in RFC 4122.
+.Xr efivar 8
+utility first appeared in
+.Fx 12.0 .
diff --git a/usr.sbin/efivar/efivar.c b/usr.sbin/efivar/efivar.c
index b0fa347a34bd..c4aa5a4397e3 100644
--- a/usr.sbin/efivar/efivar.c
+++ b/usr.sbin/efivar/efivar.c
@@ -29,6 +29,7 @@ __FBSDID("$FreeBSD$");
#include <ctype.h>
#include <efivar.h>
+#include <efivar-dp.h>
#include <err.h>
#include <errno.h>
#include <getopt.h>
@@ -201,8 +202,13 @@ bindump(uint8_t *data, size_t datalen)
static void
devpath_dump(uint8_t *data, size_t datalen)
+ char buffer[1024];
- fprintf(stderr, "junk %p %zu\n", data, datalen);
+ efidp_format_device_path(buffer, sizeof(buffer),
+ (const_efidp)data, datalen);
+ if (!Nflag)
+ printf(": ");
+ printf("%s\n", buffer);
static void