diff --git a/commands/partition.c b/commands/partition.c index 17ca136f9..64ccaf081 100644 --- a/commands/partition.c +++ b/commands/partition.c @@ -41,8 +41,6 @@ static int do_addpart(int argc, char *argv[]) { char *devname; - const char *endp; - loff_t offset = 0; loff_t devsize; struct stat s; int opt; @@ -67,28 +65,7 @@ static int do_addpart(int argc, char *argv[]) devname = basename(argv[optind]); - endp = argv[optind + 1]; - - while (1) { - loff_t size = 0; - - if (cmdlinepart_do_parse_one(devname, endp, &endp, &offset, - devsize, &size, flags)) - return 1; - - offset += size; - - if (!*endp) - break; - - if (*endp != ',') { - printf("parse error\n"); - return 1; - } - endp++; - } - - return 0; + return cmdlinepart_do_parse(devname, argv[optind + 1], devsize, flags); } BAREBOX_CMD_HELP_START(addpart) diff --git a/include/cmdlinepart.h b/include/cmdlinepart.h index 3f8e13636..bf8cdfa62 100644 --- a/include/cmdlinepart.h +++ b/include/cmdlinepart.h @@ -8,4 +8,7 @@ int cmdlinepart_do_parse_one(const char *devname, const char *partstr, loff_t devsize, loff_t *retsize, unsigned int partition_flags); +int cmdlinepart_do_parse(const char *devname, const char *parts, loff_t devsize, + unsigned partition_flags); + #endif /* __CMD_LINE_PART_H */ diff --git a/lib/cmdlinepart.c b/lib/cmdlinepart.c index 935158755..df6f17af3 100644 --- a/lib/cmdlinepart.c +++ b/lib/cmdlinepart.c @@ -93,3 +93,31 @@ int cmdlinepart_do_parse_one(const char *devname, const char *partstr, return ret; } + +int cmdlinepart_do_parse(const char *devname, const char *parts, loff_t devsize, + unsigned partition_flags) +{ + loff_t offset = 0; + int ret; + + while (1) { + loff_t size = 0; + + ret = cmdlinepart_do_parse_one(devname, parts, &parts, &offset, + devsize, &size, partition_flags); + if (ret) + return ret; + + offset += size; + if (!*parts) + break; + + if (*parts != ',') { + printf("parse error\n"); + return -EINVAL; + } + parts++; + } + + return 0; +}