[LEDE-DEV,6/7] firmware-tools/ptgen: fix start sector calculation

Message ID 1513897174-20803-7-git-send-email-mhei@heimpold.de
State New
Headers show
Series
  • firmware-tools/ptgen: minor fixes and improvements
Related show

Commit Message

Michael Heimpold Dec. 21, 2017, 10:59 p.m.
Consider the following example:

$ ./ptgen -v -a 0 -h 255 -s 63 -l 1024 -o test2.img -p 3M -p 128M -p 128M
Partition 0: start=1048576, end=4194304, size=3145728
1048576
3145728
Partition 1: start=5242880, end=139460608, size=134217728
5242880
134217728
Partition 2: start=140509184, end=274726912, size=134217728
140509184
134217728

Opening the image file with cfdisk shows that there is free space between
the partitions which is not required/intended:

               Size: 1 GiB, 1073741824 bytes, 2097152 sectors
                     Label: dos, identifier: 0x5452574f

    Device        Boot        Start       End   Sectors    Size   Id Type
    test2.img1                 2048      8191      6144      3M   83 Linux
    Free space                 8192     10239      2048      1M
    test2.img2                10240    272383    262144    128M   83 Linux
    Free space               272384    274431      2048      1M
    test2.img3               274432    536575    262144    128M   83 Linux
    Free space               536576   2097151   1560576    762M

With this patch the very same execution of ptgen results in:

$ ./ptgen -v -a 0 -h 255 -s 63 -l 1024 -o test2.img -p 3M -p 128M -p 128M
Partition 0: start=1048576, end=4194304, size=3145728
1048576
3145728
Partition 1: start=4194304, end=138412032, size=134217728
4194304
134217728
Partition 2: start=138412032, end=272629760, size=134217728
138412032
134217728

And the view with cfdisk shows, that there is no free space inserted anymore:

                              Disk: test2.img
               Size: 1 GiB, 1073741824 bytes, 2097152 sectors
                     Label: dos, identifier: 0x5452574f

    Device        Boot        Start       End   Sectors    Size   Id Type
    test2.img1                 2048      8191      6144      3M   83 Linux
    test2.img2                 8192    270335    262144    128M   83 Linux
    test2.img3               270336    532479    262144    128M   83 Linux
    Free space               532480   2097151   1564672    764M

Signed-off-by: Michael Heimpold <mhei@heimpold.de>
---
 tools/firmware-utils/src/ptgen.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Patch

diff --git a/tools/firmware-utils/src/ptgen.c b/tools/firmware-utils/src/ptgen.c
index 3e1b8ba..d549faf 100644
--- a/tools/firmware-utils/src/ptgen.c
+++ b/tools/firmware-utils/src/ptgen.c
@@ -149,7 +149,7 @@  static int gen_ptable(uint32_t signature, int nr)
 		pte[i].active = ((i + 1) == active) ? 0x80 : 0;
 		pte[i].type = parts[i].type;
 
-		start = sect + sectors;
+		start = sect + ((i == 0) ? sectors : 0);
 		if (kb_align != 0)
 			start = round_to_kb(start);
 		pte[i].start = cpu_to_le32(start);