cmd: gpt: solve issue for swap and rename command
authorPatrick Delaunay <patrick.delaunay@st.com>
Wed, 18 Oct 2017 13:11:08 +0000 (15:11 +0200)
committerTom Rini <trini@konsulko.com>
Mon, 23 Oct 2017 21:28:11 +0000 (17:28 -0400)
don't use prettyprint_part_size() in create_gpt_partitions_list()
that avoid to align offset and size to 1 MiB and increase precision for
start and size.
This patch avoid the risk to change partition size and lost data during
rename or swap.

Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
Acked-by: Stephen Warren <swarren@nvidia.com>
Tested-by: Stephen Warren <swarren@nvidia.com>
cmd/gpt.c
test/py/tests/test_gpt.py

index 27dd98755a2f9c108be408bf9e3d05407eb88ee6..707d86176673b48b43d1ccd93c22a3201649ac65 100644 (file)
--- a/cmd/gpt.c
+++ b/cmd/gpt.c
@@ -282,14 +282,14 @@ static int create_gpt_partitions_list(int numparts, const char *guid,
                strcat(partitions_list, "name=");
                strncat(partitions_list, (const char *)curr->gpt_part_info.name,
                        PART_NAME_LEN + 1);
-               strcat(partitions_list, ",start=");
-               prettyprint_part_size(partstr, (unsigned long)curr->gpt_part_info.start,
-                                     (unsigned long) curr->gpt_part_info.blksz);
+               sprintf(partstr, ",start=0x%llx",
+                       (unsigned long long)curr->gpt_part_info.start *
+                                           curr->gpt_part_info.blksz);
                /* one extra byte for NULL */
                strncat(partitions_list, partstr, PART_NAME_LEN + 1);
-               strcat(partitions_list, ",size=");
-               prettyprint_part_size(partstr, curr->gpt_part_info.size,
-                                     curr->gpt_part_info.blksz);
+               sprintf(partstr, ",size=0x%llx",
+                       (unsigned long long)curr->gpt_part_info.size *
+                                           curr->gpt_part_info.blksz);
                strncat(partitions_list, partstr, PART_NAME_LEN + 1);
 
                strcat(partitions_list, ",uuid=");
index b7adc1096e68815c46ef66c79035ae9c8a90cbcd..b9b5e5fbb04f4d6e0df511500f6735b45f1a7eac 100644 (file)
@@ -132,12 +132,8 @@ def test_gpt_rename_partition(state_disk_image, u_boot_console):
     output = u_boot_console.run_command('gpt read host 0')
     assert 'name second' in output
     output = u_boot_console.run_command('part list host 0')
-    assert '0x00000800 0x000007ff      "first"' in output
-    assert '0x00001000 0x000017ff      "second"' in output
-    # command error here because 'end LBA' (column 2) change after rename
-    # (previous value can be found in test_gpt_read)
-    # "first" 0xa00 => 0x7ff : it is an invalid value < start LBA !
-    # "seconf" 0x1200 => 0x17ff : size is increasing !
+    assert '0x00000800 0x00000a00      "first"' in output
+    assert '0x00001000 0x00001200      "second"' in output
 
 @pytest.mark.boardspec('sandbox')
 @pytest.mark.buildconfigspec('cmd_gpt')
@@ -149,12 +145,12 @@ def test_gpt_swap_partitions(state_disk_image, u_boot_console):
 
     u_boot_console.run_command('host bind 0 ' + state_disk_image.path)
     output = u_boot_console.run_command('part list host 0')
-    assert '0x00000800 0x000007ff      "first"' in output
-    assert '0x00001000 0x000017ff      "second"' in output
+    assert '0x00000800 0x00000a00      "first"' in output
+    assert '0x00001000 0x00001200      "second"' in output
     u_boot_console.run_command('gpt swap host 0 first second')
     output = u_boot_console.run_command('part list host 0')
-    assert '0x00000800 0x000007ff      "second"' in output
-    assert '0x00001000 0x000017ff      "first"' in output
+    assert '0x00000800 0x00000a00      "second"' in output
+    assert '0x00001000 0x00001200      "first"' in output
 
 @pytest.mark.boardspec('sandbox')
 @pytest.mark.buildconfigspec('cmd_gpt')