summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKay Sievers <kay@vrfy.org>2013-02-13 15:40:39 +0100
committerKay Sievers <kay@vrfy.org>2013-02-13 15:41:20 +0100
commit767ad68b56d62ebf77ee9f9afb1baceaa98df1b6 (patch)
tree129d77be5d2d3a438b57ae86f437e0d1b9b6eb67
parent5ef69a3aa3f065721625b69a1c24c202365a0c32 (diff)
setup: efi_get_boot_options() read values as hex
-rw-r--r--src/setup/efivars.c32
-rw-r--r--src/setup/setup.c6
2 files changed, 12 insertions, 26 deletions
diff --git a/src/setup/efivars.c b/src/setup/efivars.c
index b7672dd..8d231bf 100644
--- a/src/setup/efivars.c
+++ b/src/setup/efivars.c
@@ -298,18 +298,18 @@ int efi_get_boot_option(
if (title)
*title = s;
- else
- free(s);
+ else
+ free(s);
if (part_uuid)
memcpy(part_uuid, p_uuid, 16);
if (path)
*path = p;
- else
- free(p);
+ else
+ free(p);
- free(buf);
+ free(buf);
return 0;
err:
free(s);
@@ -361,26 +361,12 @@ int efi_get_boot_options(uint16_t **options) {
return -errno;
while ((de = readdir(dir))) {
- size_t n;
- int a, b, c, d;
+ unsigned int id;
uint16_t *t;
- if (strncmp(de->d_name, "Boot", 4) != 0)
- continue;
-
- n = strlen(de->d_name);
- if (n != 45)
+ if (de->d_name[0] == '.')
continue;
-
- if (strcmp(de->d_name + 8, "-8be4df61-93ca-11d2-aa0d-00e098032b8c") != 0)
- continue;
-
- a = de->d_name[4];
- b = de->d_name[5];
- c = de->d_name[6];
- d = de->d_name[7];
-
- if (!isdigit(a) || !isdigit(b) || !isdigit(c) || !isdigit(d))
+ if (sscanf(de->d_name, "Boot%04X-8be4df61-93ca-11d2-aa0d-00e098032b8c", &id) != 1)
continue;
t = realloc(list, (count + 1) * sizeof(uint16_t));
@@ -391,7 +377,7 @@ int efi_get_boot_options(uint16_t **options) {
}
list = t;
- list[count ++] = (a - '0') * 1000 + (b - '0') * 100 + (c - '0') * 10 + (d - '0');
+ list[count++] = id;
}
diff --git a/src/setup/setup.c b/src/setup/setup.c
index 5ae5a70..1dcdbde 100644
--- a/src/setup/setup.c
+++ b/src/setup/setup.c
@@ -373,7 +373,7 @@ static int status_binaries(void) {
static int print_efi_option(uint16_t id, bool in_order) {
char *title = NULL;
- char *path = NULL;
+ char *path = NULL;
uint8_t partition[16];
int r = 0;
@@ -397,8 +397,8 @@ static int print_efi_option(uint16_t id, bool in_order) {
printf("\n");
finish:
- free(title);
- free(path);
+ free(title);
+ free(path);
return r;
}