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>
master
Simon Glass 8 years ago committed by Tom Rini
parent 0b443dee6b
commit a02221f29d
  1. 233
      tools/mkimage.c

@ -70,144 +70,113 @@ 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 (*++*argv) { while ((opt = getopt(argc, argv,
switch (**argv) { "a:A:cC:d:D:e:f:Fk:K:ln:O:rR:sT:vVx")) != -1) {
case 'l': switch (opt) {
params.lflag = 1; case 'l':
break; params.lflag = 1;
case 'A': break;
if ((--argc <= 0) || case 'A':
(params.arch = params.arch = genimg_get_arch_id(optarg);
genimg_get_arch_id (*++argv)) < 0) if (params.arch < 0)
usage(); usage();
goto NXTARG; break;
case 'c': case 'c':
if (--argc <= 0) params.comment = optarg;
usage(); break;
params.comment = *++argv; case 'C':
goto NXTARG; params.comp = genimg_get_comp_id(optarg);
case 'C': if (params.comp < 0)
if ((--argc <= 0) || usage();
(params.comp = break;
genimg_get_comp_id (*++argv)) < 0) case 'D':
usage(); params.dtc = optarg;
goto NXTARG; break;
case 'D': case 'O':
if (--argc <= 0) params.os = genimg_get_os_id(optarg);
usage(); if (params.os < 0)
params.dtc = *++argv; usage();
goto NXTARG; break;
case 'T':
case 'O': params.type = genimg_get_type_id(optarg);
if ((--argc <= 0) || if (params.type < 0) {
(params.os = show_image_types();
genimg_get_os_id (*++argv)) < 0)
usage();
goto NXTARG;
case 'T':
params.type = -1;
if (--argc >= 0 && argv[1]) {
params.type =
genimg_get_type_id(*++argv);
}
if (params.type < 0) {
show_image_types();
usage();
}
goto NXTARG;
case 'a':
if (--argc <= 0)
usage();
params.addr = strtoull(*++argv, &ptr, 16);
if (*ptr) {
fprintf (stderr,
"%s: invalid load address %s\n",
params.cmdname, *argv);
exit (EXIT_FAILURE);
}
goto NXTARG;
case 'd':
if (--argc <= 0)
usage();
params.datafile = *++argv;
params.dflag = 1;
goto NXTARG;
case 'e':
if (--argc <= 0)
usage();
params.ep = strtoull(*++argv, &ptr, 16);
if (*ptr) {
fprintf (stderr,
"%s: invalid entry point %s\n",
params.cmdname, *argv);
exit (EXIT_FAILURE);
}
params.eflag = 1;
goto NXTARG;
case 'f':
if (--argc <= 0)
usage();
params.datafile = *++argv;
/* no break */
case 'F':
/*
* The flattened image tree (FIT) format
* requires a flattened device tree image type
*/
params.type = IH_TYPE_FLATDT;
params.fflag = 1;
goto NXTARG;
case 'k':
if (--argc <= 0)
usage();
params.keydir = *++argv;
goto NXTARG;
case 'K':
if (--argc <= 0)
usage();
params.keydest = *++argv;
goto NXTARG;
case 'n':
if (--argc <= 0)
usage();
params.imagename = *++argv;
goto NXTARG;
case 'r':
params.require_keys = 1;
break;
case 'R':
if (--argc <= 0)
usage();
/*
* This entry is for the second configuration
* file, if only one is not enough.
*/
params.imagename2 = *++argv;
goto NXTARG;
case 's':
params.skipcpy = 1;
break;
case 'v':
params.vflag++;
break;
case 'V':
printf("mkimage version %s\n", PLAIN_VERSION);
exit(EXIT_SUCCESS);
case 'x':
params.xflag++;
break;
default:
usage(); usage();
} }
break;
case 'a':
params.addr = strtoull(optarg, &ptr, 16);
if (*ptr) {
fprintf(stderr, "%s: invalid load address %s\n",
params.cmdname, optarg);
exit(EXIT_FAILURE);
}
break;
case 'd':
params.datafile = optarg;
params.dflag = 1;
break;
case 'e':
params.ep = strtoull(optarg, &ptr, 16);
if (*ptr) {
fprintf(stderr, "%s: invalid entry point %s\n",
params.cmdname, optarg);
exit(EXIT_FAILURE);
}
params.eflag = 1;
break;
case 'f':
params.datafile = optarg;
/* no break */
case 'F':
/*
* The flattened image tree (FIT) format
* requires a flattened device tree image type
*/
params.type = IH_TYPE_FLATDT;
params.fflag = 1;
break;
case 'k':
params.keydir = optarg;
break;
case 'K':
params.keydest = optarg;
break;
case 'n':
params.imagename = optarg;
break;
case 'r':
params.require_keys = 1;
break;
case 'R':
/*
* This entry is for the second configuration
* file, if only one is not enough.
*/
params.imagename2 = optarg;
break;
case 's':
params.skipcpy = 1;
break;
case 'v':
params.vflag++;
break;
case 'V':
printf("mkimage version %s\n", PLAIN_VERSION);
exit(EXIT_SUCCESS);
case 'x':
params.xflag++;
break;
default:
usage();
} }
NXTARG: ;
} }
if (argc != 1) if (optind >= argc)
usage(); usage();
params.imagefile = *argv; params.imagefile = argv[optind];
} }

Loading…
Cancel
Save