On Wed, Apr 23, 2025 at 04:09:11PM +0200, Marco Felsch wrote: > Add support to place the GPT partition entries to random places instead > of LBA2. > > Signed-off-by: Marco Felsch <m.fel...@pengutronix.de> > --- > v2: > - new > > commands/parted.c | 29 +++++++++++++++++++++++++++-- > 1 file changed, 27 insertions(+), 2 deletions(-) > > diff --git a/commands/parted.c b/commands/parted.c > index 90cee1ede10e..895c06524d4c 100644 > --- a/commands/parted.c > +++ b/commands/parted.c > @@ -224,6 +224,30 @@ static int do_mklabel(struct block_device *blk, int > argc, char *argv[]) > return -EINVAL; > } > > + if (argc == 3) { > + uint64_t mult; > + int ret; > + > + if (!strcmp(argv[1], "msdos")) { > + printf("gpt-location not supported for msdos > partitions\n"); > + return -EINVAL; > + } > + > + ret = parted_strtoull(argv[2], &gpt_location, &mult); > + if (ret) > + return ret; > + > + if (!mult) > + mult = gunit; > + > + gpt_location *= mult; > + > + /* Ensure alignment */ > + gpt_location = ALIGN(gpt_location, SECTOR_SIZE); > + /* convert to LBA */ > + gpt_location >>= SECTOR_SHIFT; > + } > + > pdesc = partition_table_new(blk, argv[1], gpt_location); > if (IS_ERR(pdesc)) { > printf("Error: Cannot create partition table: %pe\n", pdesc); > @@ -236,7 +260,7 @@ static int do_mklabel(struct block_device *blk, int argc, > char *argv[]) > partition_table_free(gpdesc); > gpdesc = pdesc; > > - return 2; > + return argc > 2 ? 3 : 2;
Optional arguments are not supported by parted. You can pass multiple commands to parted, e.g. parted /dev/mmc0 mklabel gpt mkpart foo ext4 4MiB 1024MiB argc will contain the remaining arguments, when another command follows it won't be exactly three and you can't tell if the argument belongs to this command or is the start of the next one. You could implement it as an option. Sascha -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |