Skip to content

Commit

Permalink
Add support for --sysprep and --driver
Browse files Browse the repository at this point in the history
Maybe this fixes issue #40 .

Signed-off-by: Peter Jones <[email protected]>
  • Loading branch information
vathpela committed Aug 11, 2016
1 parent 0394333 commit 356b307
Show file tree
Hide file tree
Showing 5 changed files with 454 additions and 343 deletions.
26 changes: 18 additions & 8 deletions src/efi.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,17 +45,20 @@
#include "list.h"

static int
select_boot_var_names(const efi_guid_t *guid, const char *name)
select_var_names_by_prefix(const efi_guid_t *guid, const char *prefix,
const char *name)
{
efi_guid_t global = EFI_GLOBAL_GUID;
if (!strncmp(name, "Boot", 4) &&
isxdigit(name[4]) && isxdigit(name[5]) &&
isxdigit(name[6]) && isxdigit(name[7]) &&
size_t plen = strlen(prefix);
const char *num = name + plen;
if (!strncmp(name, prefix, plen) &&
isxdigit(num[0]) && isxdigit(num[1]) &&
isxdigit(num[2]) && isxdigit(num[3]) &&
!memcmp(guid, &global, sizeof (global)))
return 1;
return 0;
}
typedef __typeof__(select_boot_var_names) filter_t;
typedef __typeof__(select_var_names_by_prefix) filter_t;

static int
cmpstringp(const void *p1, const void *p2)
Expand All @@ -66,7 +69,7 @@ cmpstringp(const void *p1, const void *p2)
}

static int
read_var_names(filter_t filter, char ***namelist)
read_prefixed_var_names(filter_t filter, const char *prefix, char ***namelist)
{
int rc;
efi_guid_t *guid = NULL;
Expand All @@ -80,7 +83,7 @@ read_var_names(filter_t filter, char ***namelist)
return -1;

while ((rc = efi_get_next_variable_name(&guid, &name)) > 0) {
if (!filter(guid, name))
if (!filter(guid, prefix, name))
continue;

char *aname = strdup(name);
Expand Down Expand Up @@ -114,10 +117,17 @@ read_var_names(filter_t filter, char ***namelist)
return rc;
}

int
read_var_names(const char *prefix, char ***namelist)
{
return read_prefixed_var_names(select_var_names_by_prefix,
prefix, namelist);
}

int
read_boot_var_names(char ***namelist)
{
return read_var_names(select_boot_var_names, namelist);
return read_var_names("Boot", namelist);
}

#if 0
Expand Down
8 changes: 7 additions & 1 deletion src/efibootmgr.8
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
efibootmgr \- manipulate the EFI Boot Manager
.SH SYNOPSIS

\fBefibootmgr\fR [ \fB-a\fR ] [ \fB-A\fR ] [ \fB-b \fIXXXX\fB\fR ] [ \fB-B \fIXXXX\fB\fR ] [ \fB-c\fR ] [ \fB-d \fIDISK\fB\fR ] [ \fB-D\fR ] [ \fB-e \fI1|3|-1\fB\fR ] [ \fB-E \fINUM\fB\fR ] [ \fB-g\fR ] [ \fB-H \fIXXXX\fB\fR ] [ \fB-i \fINAME\fB\fR ] [ \fB-l \fINAME\fB\fR ] [ \fB-L \fILABEL\fB\fR ] [ \fB-m \fIt|f\fB\fR ] [ \fB-M \fIX\fB\fR ] [ \fB-n \fIXXXX\fB\fR ] [ \fB-N\fR ] [ \fB-o \fIXXXX\fB,\fIYYYY\fB,\fIZZZZ\fB\fR\fI ...\fR ] [ \fB-O\fR ] [ \fB-p \fIPART\fB\fR ] [ \fB-q\fR ] [ \fB-t \fIseconds\fB\fR ] [ \fB-T\fR ] [ \fB-u\fR ] [ \fB-U \fIXXXX\fB\fR ] [ \fB-v\fR ] [ \fB-V\fR ] [ \fB-w\fR ] [ \fB-@ \fIfile\fB\fR ]
\fBefibootmgr\fR [ \fB-a\fR ] [ \fB-A\fR ] [ \fB-b \fIXXXX\fB\fR ] [ -r | -y ] [ \fB-B \fIXXXX\fB\fR ] [ \fB-c\fR ] [ \fB-d \fIDISK\fB\fR ] [ \fB-D\fR ] [ \fB-e \fI1|3|-1\fB\fR ] [ \fB-E \fINUM\fB\fR ] [ \fB-g\fR ] [ \fB-H \fIXXXX\fB\fR ] [ \fB-i \fINAME\fB\fR ] [ \fB-l \fINAME\fB\fR ] [ \fB-L \fILABEL\fB\fR ] [ \fB-m \fIt|f\fB\fR ] [ \fB-M \fIX\fB\fR ] [ \fB-n \fIXXXX\fB\fR ] [ \fB-N\fR ] [ \fB-o \fIXXXX\fB,\fIYYYY\fB,\fIZZZZ\fB\fR\fI ...\fR ] [ \fB-O\fR ] [ \fB-p \fIPART\fB\fR ] [ \fB-q\fR ] [ \fB-t \fIseconds\fB\fR ] [ \fB-T\fR ] [ \fB-u\fR ] [ \fB-U \fIXXXX\fB\fR ] [ \fB-v\fR ] [ \fB-V\fR ] [ \fB-w\fR ] [ \fB-@ \fIfile\fB\fR ]

.SH "DESCRIPTION"
.PP
Expand Down Expand Up @@ -96,6 +96,9 @@ Partition number containing the bootloader (defaults to 1)
\fB-q | --quiet\fR
Quiet mode - supresses output.
.TP
\fB-r | --driver\fR
Operate on Driver#### variables instead of Boot#### variables.
.TP
\fB-t | --timeout \fIseconds\fB\fR
Boot Manager timeout, in \fIseconds\fR\&.
.TP
Expand All @@ -115,6 +118,9 @@ Just print version string and exit.
\fB-w | --write-signature\fR
write unique signature to the MBR if needed
.TP
\fB-y | --sysprep\fR
Operate on SysPrep#### variables instead of Boot#### variables.
.TP
\fB-@ | --append-binary-args \fR
append extra variable args from file (use - to read
from stdin). Data in file is appended as command line
Expand Down
Loading

0 comments on commit 356b307

Please sign in to comment.