gpt: add search by partition label and uuid commands
Builds on the existing filesystem search code. Only for GPT right now.
This commit is contained in:
parent
9c61d9bc2c
commit
c70627bc9f
10 changed files with 251 additions and 0 deletions
|
@ -21,10 +21,12 @@
|
|||
#include <grub/disk.h>
|
||||
#include <grub/emu/hostdisk.h>
|
||||
#include <grub/emu/misc.h>
|
||||
#include <grub/env.h>
|
||||
#include <grub/err.h>
|
||||
#include <grub/gpt_partition.h>
|
||||
#include <grub/msdos_partition.h>
|
||||
#include <grub/lib/hexdump.h>
|
||||
#include <grub/search.h>
|
||||
#include <grub/test.h>
|
||||
|
||||
#include <errno.h>
|
||||
|
@ -534,6 +536,84 @@ repair_test (void)
|
|||
|
||||
close_disk (&data);
|
||||
}
|
||||
|
||||
static void
|
||||
search_label_test (void)
|
||||
{
|
||||
struct test_data data;
|
||||
const char *test_result;
|
||||
char *expected_result;
|
||||
|
||||
open_disk (&data);
|
||||
|
||||
expected_result = grub_xasprintf ("%s,gpt1", data.dev->disk->name);
|
||||
grub_env_unset ("test_result");
|
||||
grub_search_part_label ("EFI SYSTEM", "test_result", 0, NULL, 0);
|
||||
test_result = grub_env_get ("test_result");
|
||||
grub_test_assert (test_result && strcmp (test_result, expected_result) == 0,
|
||||
"wrong device: %s (%s)", test_result, expected_result);
|
||||
grub_free (expected_result);
|
||||
|
||||
expected_result = grub_xasprintf ("%s,gpt2", data.dev->disk->name);
|
||||
grub_env_unset ("test_result");
|
||||
grub_search_part_label ("BIOS BOOT", "test_result", 0, NULL, 0);
|
||||
test_result = grub_env_get ("test_result");
|
||||
grub_test_assert (test_result && strcmp (test_result, expected_result) == 0,
|
||||
"wrong device: %s (%s)", test_result, expected_result);
|
||||
grub_free (expected_result);
|
||||
|
||||
grub_env_unset ("test_result");
|
||||
grub_search_part_label ("bogus name", "test_result", 0, NULL, 0);
|
||||
test_result = grub_env_get ("test_result");
|
||||
grub_test_assert (test_result == NULL,
|
||||
"unexpected device: %s", test_result);
|
||||
grub_test_assert (grub_errno == GRUB_ERR_FILE_NOT_FOUND,
|
||||
"unexpected error: %s", grub_errmsg);
|
||||
grub_errno = GRUB_ERR_NONE;
|
||||
|
||||
close_disk (&data);
|
||||
}
|
||||
|
||||
static void
|
||||
search_uuid_test (void)
|
||||
{
|
||||
struct test_data data;
|
||||
const char gpt1_uuid[] = "A0F1792E-B4CE-4136-BCF2-1AFC133C2828";
|
||||
const char gpt2_uuid[] = "876c898d-1b40-4727-a161-edf9b5486674";
|
||||
const char bogus_uuid[] = "1534c928-c50e-4866-9daf-6a9fd7918a76";
|
||||
const char *test_result;
|
||||
char *expected_result;
|
||||
|
||||
open_disk (&data);
|
||||
|
||||
expected_result = grub_xasprintf ("%s,gpt1", data.dev->disk->name);
|
||||
grub_env_unset ("test_result");
|
||||
grub_search_part_uuid (gpt1_uuid, "test_result", 0, NULL, 0);
|
||||
test_result = grub_env_get ("test_result");
|
||||
grub_test_assert (test_result && strcmp (test_result, expected_result) == 0,
|
||||
"wrong device: %s (%s)", test_result, expected_result);
|
||||
grub_free (expected_result);
|
||||
|
||||
expected_result = grub_xasprintf ("%s,gpt2", data.dev->disk->name);
|
||||
grub_env_unset ("test_result");
|
||||
grub_search_part_uuid (gpt2_uuid, "test_result", 0, NULL, 0);
|
||||
test_result = grub_env_get ("test_result");
|
||||
grub_test_assert (test_result && strcmp (test_result, expected_result) == 0,
|
||||
"wrong device: %s (%s)", test_result, expected_result);
|
||||
grub_free (expected_result);
|
||||
|
||||
grub_env_unset ("test_result");
|
||||
grub_search_part_uuid (bogus_uuid, "test_result", 0, NULL, 0);
|
||||
test_result = grub_env_get ("test_result");
|
||||
grub_test_assert (test_result == NULL,
|
||||
"unexpected device: %s", test_result);
|
||||
grub_test_assert (grub_errno == GRUB_ERR_FILE_NOT_FOUND,
|
||||
"unexpected error: %s", grub_errmsg);
|
||||
grub_errno = GRUB_ERR_NONE;
|
||||
|
||||
close_disk (&data);
|
||||
}
|
||||
|
||||
void
|
||||
grub_unit_test_init (void)
|
||||
{
|
||||
|
@ -546,6 +626,8 @@ grub_unit_test_init (void)
|
|||
grub_test_register ("gpt_read_invalid_test", read_invalid_entries_test);
|
||||
grub_test_register ("gpt_read_fallback_test", read_fallback_test);
|
||||
grub_test_register ("gpt_repair_test", repair_test);
|
||||
grub_test_register ("gpt_search_label_test", search_label_test);
|
||||
grub_test_register ("gpt_search_uuid_test", search_uuid_test);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -557,5 +639,7 @@ grub_unit_test_fini (void)
|
|||
grub_test_unregister ("gpt_read_invalid_test");
|
||||
grub_test_unregister ("gpt_read_fallback_test");
|
||||
grub_test_unregister ("gpt_repair_test");
|
||||
grub_test_unregister ("gpt_search_label_test");
|
||||
grub_test_unregister ("gpt_search_uuid_test");
|
||||
grub_fini_all ();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue