From: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
To: Joshua Watt <jpewhacker@gmail.com>
Cc: Simon Glass <sjg@chromium.org>,
Enric Balletbo i Serra <eballetb@redhat.com>,
u-boot@lists.denx.de
Subject: Re: [PATCH v3 6/8] cmd: gpt: Preserve type GUID if enabled
Date: Sat, 26 Aug 2023 02:37:55 +0200 [thread overview]
Message-ID: <01a5437a-9018-d962-8568-e1abdc96c8ad@canonical.com> (raw)
In-Reply-To: <20230825193830.2753640-7-JPEWhacker@gmail.com>
On 8/25/23 21:38, Joshua Watt wrote:
> If CONFIG_PARTITION_TYPE_GUID is enabled, the type GUID will be
> preserved when writing out the partition string. It was already
> respected when writing out partitions; this ensures that if you capture
> the current partition layout and write it back (such as when renaming),
> the type GUIDs are preserved.
>
> Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
> Reviewed-by: Simon Glass <sjg@chromium.org>
> ---
> cmd/gpt.c | 16 ++++++++++
> test/py/tests/test_gpt.py | 66 +++++++++++++++++++++++++++++++++++++++
> 2 files changed, 82 insertions(+)
>
> diff --git a/cmd/gpt.c b/cmd/gpt.c
> index 1fe7f1a7db..b7d861aa1e 100644
> --- a/cmd/gpt.c
> +++ b/cmd/gpt.c
> @@ -173,6 +173,9 @@ static int calc_parts_list_len(int numparts)
> /* see part.h for definition of struct disk_partition */
> partlistlen += numparts * (strlen("start=MiB,") + sizeof(lbaint_t) + 1);
> partlistlen += numparts * (strlen("size=MiB,") + sizeof(lbaint_t) + 1);
> +#ifdef CONFIG_PARTITION_TYPE_GUID
> + partlistlen += numparts * (strlen("type=,") + UUID_STR_LEN + 1);
> +#endif
> partlistlen += numparts * (strlen("uuid=;") + UUID_STR_LEN + 1);
> /* for the terminating null */
> partlistlen++;
> @@ -211,6 +214,11 @@ static struct disk_part *allocate_disk_part(struct disk_partition *info,
> PART_TYPE_LEN);
> newpart->gpt_part_info.type[PART_TYPE_LEN - 1] = '\0';
> newpart->gpt_part_info.bootable = info->bootable;
> +#ifdef CONFIG_PARTITION_TYPE_GUID
> + strncpy(newpart->gpt_part_info.type_guid, (const char *)info->type_guid,
> + UUID_STR_LEN);
> + newpart->gpt_part_info.type_guid[UUID_STR_LEN] = '\0';
> +#endif
> #ifdef CONFIG_PARTITION_UUIDS
> strncpy(newpart->gpt_part_info.uuid, (const char *)info->uuid,
> UUID_STR_LEN);
> @@ -252,6 +260,9 @@ static void print_gpt_info(void)
> curr->gpt_part_info.name);
> printf("Type %s, bootable %d\n", curr->gpt_part_info.type,
> curr->gpt_part_info.bootable & PART_BOOTABLE);
> +#ifdef CONFIG_PARTITION_TYPE_GUID
> + printf("Type GUID %s\n", curr->gpt_part_info.type_guid);
> +#endif
> #ifdef CONFIG_PARTITION_UUIDS
> printf("UUID %s\n", curr->gpt_part_info.uuid);
> #endif
> @@ -299,6 +310,11 @@ static int create_gpt_partitions_list(int numparts, const char *guid,
> curr->gpt_part_info.blksz);
> strncat(partitions_list, partstr, PART_NAME_LEN + 1);
>
> +#ifdef CONFIG_PARTITION_TYPE_GUID
> + strcat(partitions_list, ",type=");
> + strncat(partitions_list, curr->gpt_part_info.type_guid,
> + UUID_STR_LEN + 1);
> +#endif
> strcat(partitions_list, ",uuid=");
> strncat(partitions_list, curr->gpt_part_info.uuid,
> UUID_STR_LEN + 1);
> diff --git a/test/py/tests/test_gpt.py b/test/py/tests/test_gpt.py
> index 5d23f9b292..09a90f026f 100644
> --- a/test/py/tests/test_gpt.py
> +++ b/test/py/tests/test_gpt.py
> @@ -16,6 +16,35 @@ the test.
> # Mark all tests here as slow
> pytestmark = pytest.mark.slow
>
> +def parse_gpt_parts(disk_str):
> + """Parser a partition string into a list of partitions.
> +
> + Args:
> + disk_str: The disk description string, as returned by `gpt read`
> +
> + Returns:
> + A list of parsed partitions. Each partition is a dictionary with the
> + string value from each specified key in the partition description, or a
> + key with with the value True for a boolean flag
> + """
> + parts = []
> + for part_str in disk_str.split(';'):
> + part = {}
> + for option in part_str.split(","):
> + if not option:
> + continue
> +
> + if "=" in option:
> + k, v = option.split("=")
This results in a pylint warning:
C0103: Variable name "v" doesn't conform to snake_case naming style
(invalid-name)
How about key, value?
> + part[k] = v
> + else:
> + part[option] = True
> +
> + if part:
> + parts.append(part)
> +
> + return parts
> +
> class GptTestDiskImage(object):
> """Disk Image used by the GPT tests."""
>
> @@ -49,11 +78,13 @@ class GptTestDiskImage(object):
> u_boot_utils.run_and_log(u_boot_console, cmd)
> # part1 offset 1MB size 1MB
> cmd = ('sgdisk', '--new=1:2048:4095', '--change-name=1:part1',
> + '--partition-guid=1:33194895-67f6-4561-8457-6fdeed4f50a3',
> '-A 1:set:2',
> persistent)
> # part2 offset 2MB size 1.5MB
> u_boot_utils.run_and_log(u_boot_console, cmd)
> cmd = ('sgdisk', '--new=2:4096:7167', '--change-name=2:part2',
> + '--partition-guid=2:cc9c6e4a-6551-4cb5-87be-3210f96c86fb',
> persistent)
> u_boot_utils.run_and_log(u_boot_console, cmd)
> cmd = ('sgdisk', '--load-backup=' + persistent)
> @@ -88,6 +119,40 @@ def test_gpt_read(state_disk_image, u_boot_console):
> assert '0x00000800 0x00000fff "part1"' in output
> assert '0x00001000 0x00001bff "part2"' in output
>
> +@pytest.mark.boardspec('sandbox')
> +@pytest.mark.buildconfigspec('cmd_gpt')
> +@pytest.mark.buildconfigspec('partition_type_guid')
> +@pytest.mark.requiredtool('sgdisk')
> +def test_gpt_read_var(state_disk_image, u_boot_console):
> + """Test the gpt read command."""
> +
> + u_boot_console.run_command('host bind 0 ' + state_disk_image.path)
> + output = u_boot_console.run_command('gpt read host 0 gpt_parts')
> + assert 'success!' in output
> +
> + output = u_boot_console.run_command('echo ${gpt_parts}')
> + parts = parse_gpt_parts(output.rstrip())
> +
> + assert parts == [
> + {
> + "uuid_disk": "375a56f7-d6c9-4e81-b5f0-09d41ca89efe",
> + },
> + {
> + "name": "part1",
> + "start": "0x100000",
> + "size": "0x100000",
> + "type": "0fc63daf-8483-4772-8e79-3d69d8477de4",
> + "uuid": "33194895-67f6-4561-8457-6fdeed4f50a3",
> + },
> + {
> + "name": "part2",
> + "start": "0x200000",
> + "size": "0x180000",
> + "type": "0fc63daf-8483-4772-8e79-3d69d8477de4",
> + "uuid": "cc9c6e4a-6551-4cb5-87be-3210f96c86fb",
> + },
> + ]
> +
> @pytest.mark.boardspec('sandbox')
> @pytest.mark.buildconfigspec('cmd_gpt')
> @pytest.mark.requiredtool('sgdisk')
> @@ -263,3 +328,4 @@ def test_gpt_write(state_disk_image, u_boot_console):
> assert '0x00001000 0x00001bff "second"' in output
> output = u_boot_console.run_command('gpt guid host 0')
> assert '375a56f7-d6c9-4e81-b5f0-09d41ca89efe' in output
> +
Please, remove this white space line.
Best regards
Heinrich
next prev parent reply other threads:[~2023-08-26 0:37 UTC|newest]
Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-15 16:26 [PATCH 0/6] cmd: gpt: GPT manipulation improvements Joshua Watt
2023-08-15 16:26 ` [PATCH 1/6] cmd: gpt: Remove confusing help text Joshua Watt
2023-08-18 14:23 ` Tom Rini
2023-08-23 23:57 ` Simon Glass
2023-08-15 16:26 ` [PATCH 2/6] cmd: gpt: Add command to set bootable flags Joshua Watt
2023-08-15 18:39 ` Simon Glass
2023-08-15 16:26 ` [PATCH 3/6] cmd: gpt: Add gpt_partition_bootable variable Joshua Watt
2023-08-15 16:26 ` [PATCH 4/6] cmd: gpt: Preserve type GUID if enabled Joshua Watt
2023-08-15 16:26 ` [PATCH 5/6] cmd: gpt: Preserve bootable flag Joshua Watt
2023-08-15 16:27 ` [PATCH 6/6] cmd: gpt: Add command to swap partition order Joshua Watt
2023-08-23 23:57 ` Simon Glass
2023-08-23 16:47 ` [PATCH v2 0/8] cmd: gpt: GPT manipulation improvements Joshua Watt
2023-08-23 16:47 ` [PATCH v2 1/8] cmd: gpt: Remove confusing help text Joshua Watt
2023-08-23 18:15 ` Tom Rini
2023-08-23 16:47 ` [PATCH v2 2/8] doc: Add gpt command documentation Joshua Watt
2023-08-23 18:15 ` Tom Rini
2023-08-23 23:57 ` Simon Glass
2023-08-23 16:47 ` [PATCH v2 3/8] tests: gpt: Remove test order dependency Joshua Watt
2023-08-23 23:57 ` Simon Glass
2023-08-24 3:29 ` Joshua Watt
2023-08-23 16:47 ` [PATCH v2 4/8] cmd: gpt: Add gpt_partition_bootable variable Joshua Watt
2023-08-23 23:57 ` Simon Glass
2023-08-23 16:47 ` [PATCH v2 5/8] cmd: gpt: Add command to set bootable flags Joshua Watt
2023-08-23 23:57 ` Simon Glass
2023-08-23 16:47 ` [PATCH v2 6/8] cmd: gpt: Preserve type GUID if enabled Joshua Watt
2023-08-23 23:57 ` Simon Glass
2023-08-23 16:47 ` [PATCH v2 7/8] cmd: gpt: Preserve bootable flag Joshua Watt
2023-08-23 23:57 ` Simon Glass
2023-08-23 16:47 ` [PATCH v2 8/8] cmd: gpt: Add command to swap partition order Joshua Watt
2023-08-25 19:38 ` [PATCH v3 0/8] cmd: gpt: GPT manipulation improvements Joshua Watt
2023-08-25 19:38 ` [PATCH v3 1/8] cmd: gpt: Remove confusing help text Joshua Watt
2023-08-25 19:38 ` [PATCH v3 2/8] doc: Add gpt command documentation Joshua Watt
2023-08-25 23:53 ` Simon Glass
2023-08-28 21:52 ` Joshua Watt
2023-08-26 1:57 ` Heinrich Schuchardt
2023-08-28 19:29 ` Joshua Watt
2023-08-28 20:01 ` Heinrich Schuchardt
2023-08-28 21:01 ` Joshua Watt
2023-08-25 19:38 ` [PATCH v3 3/8] tests: gpt: Remove test order dependency Joshua Watt
2023-08-25 19:38 ` [PATCH v3 4/8] cmd: gpt: Add gpt_partition_bootable variable Joshua Watt
2023-08-25 23:53 ` Simon Glass
2023-08-25 19:38 ` [PATCH v3 5/8] cmd: gpt: Add command to set bootable flags Joshua Watt
2023-08-25 19:38 ` [PATCH v3 6/8] cmd: gpt: Preserve type GUID if enabled Joshua Watt
2023-08-25 23:53 ` Simon Glass
2023-08-26 0:37 ` Heinrich Schuchardt [this message]
2023-08-25 19:38 ` [PATCH v3 7/8] cmd: gpt: Preserve bootable flag Joshua Watt
2023-08-25 19:38 ` [PATCH v3 8/8] cmd: gpt: Add command to swap partition order Joshua Watt
2023-08-25 23:53 ` Simon Glass
2023-08-26 1:00 ` Heinrich Schuchardt
2023-08-28 21:56 ` [PATCH v4 0/8] cmd: gpt: GPT manipulation improvements Joshua Watt
2023-08-28 21:56 ` [PATCH v4 1/8] cmd: gpt: Remove confusing help text Joshua Watt
2023-08-28 22:05 ` Heinrich Schuchardt
2023-08-28 21:56 ` [PATCH v4 2/8] doc: Add gpt command documentation Joshua Watt
2023-08-28 22:45 ` Heinrich Schuchardt
2023-08-28 22:59 ` Heinrich Schuchardt
2023-08-29 13:22 ` Joshua Watt
2023-08-28 21:56 ` [PATCH v4 3/8] tests: gpt: Remove test order dependency Joshua Watt
2023-08-28 21:56 ` [PATCH v4 4/8] cmd: gpt: Add gpt_partition_bootable variable Joshua Watt
2023-08-28 21:56 ` [PATCH v4 5/8] cmd: gpt: Add command to set bootable flags Joshua Watt
2023-08-28 22:54 ` Heinrich Schuchardt
2023-08-29 13:24 ` Joshua Watt
2023-08-28 21:56 ` [PATCH v4 6/8] cmd: gpt: Preserve type GUID if enabled Joshua Watt
2023-08-28 21:56 ` [PATCH v4 7/8] cmd: gpt: Preserve bootable flag Joshua Watt
2023-08-28 21:56 ` [PATCH v4 8/8] cmd: gpt: Add command to swap partition order Joshua Watt
2023-08-31 16:51 ` [PATCH v5 0/8] cmd: gpt: GPT manipulation improvements Joshua Watt
2023-08-31 16:51 ` [PATCH v5 1/8] cmd: gpt: Remove confusing help text Joshua Watt
2023-08-31 16:51 ` [PATCH v5 2/8] doc: Add gpt command documentation Joshua Watt
2023-08-31 16:51 ` [PATCH v5 3/8] tests: gpt: Remove test order dependency Joshua Watt
2023-09-12 15:17 ` Tom Rini
2023-08-31 16:51 ` [PATCH v5 4/8] cmd: gpt: Add gpt_partition_bootable variable Joshua Watt
2023-08-31 16:51 ` [PATCH v5 5/8] cmd: gpt: Add command to set bootable flags Joshua Watt
2023-08-31 16:51 ` [PATCH v5 6/8] cmd: gpt: Preserve type GUID if enabled Joshua Watt
2023-08-31 16:51 ` [PATCH v5 7/8] cmd: gpt: Preserve bootable flag Joshua Watt
2023-08-31 16:51 ` [PATCH v5 8/8] cmd: gpt: Add command to swap partition order Joshua Watt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=01a5437a-9018-d962-8568-e1abdc96c8ad@canonical.com \
--to=heinrich.schuchardt@canonical.com \
--cc=eballetb@redhat.com \
--cc=jpewhacker@gmail.com \
--cc=sjg@chromium.org \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.