mkimage: Convert to use getopt()

The current way of parsing arguments is a bit clumsy. It seems better to
use getopt() which is commonly used for this purpose.

Convert the code to use getopt() and make a few minor adjustments as needed.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2016-02-22 22:55:34 -07:00 committed by Tom Rini
parent 0b443dee6b
commit a02221f29d

View file

@ -70,86 +70,65 @@ static void show_image_types(void)
static void process_args(int argc, char **argv) static void process_args(int argc, char **argv)
{ {
char *ptr; char *ptr;
int opt;
while (--argc > 0 && **++argv == '-') { while ((opt = getopt(argc, argv,
while (*++*argv) { "a:A:cC:d:D:e:f:Fk:K:ln:O:rR:sT:vVx")) != -1) {
switch (**argv) { switch (opt) {
case 'l': case 'l':
params.lflag = 1; params.lflag = 1;
break; break;
case 'A': case 'A':
if ((--argc <= 0) || params.arch = genimg_get_arch_id(optarg);
(params.arch = if (params.arch < 0)
genimg_get_arch_id (*++argv)) < 0)
usage(); usage();
goto NXTARG; break;
case 'c': case 'c':
if (--argc <= 0) params.comment = optarg;
usage(); break;
params.comment = *++argv;
goto NXTARG;
case 'C': case 'C':
if ((--argc <= 0) || params.comp = genimg_get_comp_id(optarg);
(params.comp = if (params.comp < 0)
genimg_get_comp_id (*++argv)) < 0)
usage(); usage();
goto NXTARG; break;
case 'D': case 'D':
if (--argc <= 0) params.dtc = optarg;
usage(); break;
params.dtc = *++argv;
goto NXTARG;
case 'O': case 'O':
if ((--argc <= 0) || params.os = genimg_get_os_id(optarg);
(params.os = if (params.os < 0)
genimg_get_os_id (*++argv)) < 0)
usage(); usage();
goto NXTARG; break;
case 'T': case 'T':
params.type = -1; params.type = genimg_get_type_id(optarg);
if (--argc >= 0 && argv[1]) {
params.type =
genimg_get_type_id(*++argv);
}
if (params.type < 0) { if (params.type < 0) {
show_image_types(); show_image_types();
usage(); usage();
} }
goto NXTARG; break;
case 'a': case 'a':
if (--argc <= 0) params.addr = strtoull(optarg, &ptr, 16);
usage();
params.addr = strtoull(*++argv, &ptr, 16);
if (*ptr) { if (*ptr) {
fprintf (stderr, fprintf(stderr, "%s: invalid load address %s\n",
"%s: invalid load address %s\n", params.cmdname, optarg);
params.cmdname, *argv); exit(EXIT_FAILURE);
exit (EXIT_FAILURE);
} }
goto NXTARG; break;
case 'd': case 'd':
if (--argc <= 0) params.datafile = optarg;
usage();
params.datafile = *++argv;
params.dflag = 1; params.dflag = 1;
goto NXTARG; break;
case 'e': case 'e':
if (--argc <= 0) params.ep = strtoull(optarg, &ptr, 16);
usage();
params.ep = strtoull(*++argv, &ptr, 16);
if (*ptr) { if (*ptr) {
fprintf (stderr, fprintf(stderr, "%s: invalid entry point %s\n",
"%s: invalid entry point %s\n", params.cmdname, optarg);
params.cmdname, *argv); exit(EXIT_FAILURE);
exit (EXIT_FAILURE);
} }
params.eflag = 1; params.eflag = 1;
goto NXTARG; break;
case 'f': case 'f':
if (--argc <= 0) params.datafile = optarg;
usage();
params.datafile = *++argv;
/* no break */ /* no break */
case 'F': case 'F':
/* /*
@ -158,34 +137,26 @@ static void process_args(int argc, char **argv)
*/ */
params.type = IH_TYPE_FLATDT; params.type = IH_TYPE_FLATDT;
params.fflag = 1; params.fflag = 1;
goto NXTARG; break;
case 'k': case 'k':
if (--argc <= 0) params.keydir = optarg;
usage(); break;
params.keydir = *++argv;
goto NXTARG;
case 'K': case 'K':
if (--argc <= 0) params.keydest = optarg;
usage(); break;
params.keydest = *++argv;
goto NXTARG;
case 'n': case 'n':
if (--argc <= 0) params.imagename = optarg;
usage(); break;
params.imagename = *++argv;
goto NXTARG;
case 'r': case 'r':
params.require_keys = 1; params.require_keys = 1;
break; break;
case 'R': case 'R':
if (--argc <= 0)
usage();
/* /*
* This entry is for the second configuration * This entry is for the second configuration
* file, if only one is not enough. * file, if only one is not enough.
*/ */
params.imagename2 = *++argv; params.imagename2 = optarg;
goto NXTARG; break;
case 's': case 's':
params.skipcpy = 1; params.skipcpy = 1;
break; break;
@ -202,12 +173,10 @@ static void process_args(int argc, char **argv)
usage(); usage();
} }
} }
NXTARG: ;
}
if (argc != 1) if (optind >= argc)
usage(); usage();
params.imagefile = *argv; params.imagefile = argv[optind];
} }