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
This commit is contained in:
Warner Losh 2017-03-09 00:31:36 +00:00
parent 7270962aa5
commit 2f2f5c6728
2 changed files with 37 additions and 16 deletions

View File

@ -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
.Dt EFIVAR 8
.Os
.Sh NAME
@ -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
.Sh DESCRIPTION
This program manages
.Dq Unified Extensible Firmware Interface
@ -117,6 +117,9 @@ flags.
No
.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
decimal.
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
to
.Ar value .
This is not yet implemented.
If the
.Sh COMPATIBILITY
The
.Nm
program is intended to be compatible (strict superset) with a progam
of the same name included in the Red Hat libefivar package.
.Pp
Except the
.Fl d
and
.Fl -print-decimal
flags are not implmenented and never will be.
The
.Fl d
flag is a short-hand for
.Fl -device-path .
.Sh SEE ALSO
Appendix A of the UEFI specification has the format for GUIDs.
All GUIDs
.Dq Globally Unique Identifiers
have the format described in RFC 4122.
.El
.Pp
.Xr efivar 8
.Sh HISTORY
The
.Nm
utility first appeared in
.Fx 12.0 .

View File

@ -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