mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-19 19:34:35 +00:00
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:
parent
0b443dee6b
commit
a02221f29d
1 changed files with 100 additions and 131 deletions
231
tools/mkimage.c
231
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 ((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();
|
break;
|
||||||
goto NXTARG;
|
case 'c':
|
||||||
case 'c':
|
params.comment = optarg;
|
||||||
if (--argc <= 0)
|
break;
|
||||||
usage();
|
case 'C':
|
||||||
params.comment = *++argv;
|
params.comp = genimg_get_comp_id(optarg);
|
||||||
goto NXTARG;
|
if (params.comp < 0)
|
||||||
case 'C':
|
usage();
|
||||||
if ((--argc <= 0) ||
|
break;
|
||||||
(params.comp =
|
case 'D':
|
||||||
genimg_get_comp_id (*++argv)) < 0)
|
params.dtc = optarg;
|
||||||
usage();
|
break;
|
||||||
goto NXTARG;
|
case 'O':
|
||||||
case 'D':
|
params.os = genimg_get_os_id(optarg);
|
||||||
if (--argc <= 0)
|
if (params.os < 0)
|
||||||
usage();
|
usage();
|
||||||
params.dtc = *++argv;
|
break;
|
||||||
goto NXTARG;
|
case 'T':
|
||||||
|
params.type = genimg_get_type_id(optarg);
|
||||||
case 'O':
|
if (params.type < 0) {
|
||||||
if ((--argc <= 0) ||
|
show_image_types();
|
||||||
(params.os =
|
|
||||||
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…
Add table
Reference in a new issue