diff options
author | Kay Sievers <kay@vrfy.org> | 2013-02-13 15:40:39 +0100 |
---|---|---|
committer | Kay Sievers <kay@vrfy.org> | 2013-02-13 15:41:20 +0100 |
commit | 767ad68b56d62ebf77ee9f9afb1baceaa98df1b6 (patch) | |
tree | 129d77be5d2d3a438b57ae86f437e0d1b9b6eb67 | |
parent | 5ef69a3aa3f065721625b69a1c24c202365a0c32 (diff) |
setup: efi_get_boot_options() read values as hex
-rw-r--r-- | src/setup/efivars.c | 32 | ||||
-rw-r--r-- | src/setup/setup.c | 6 |
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; } |