mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 23:24:38 +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)
|
||||
{
|
||||
char *ptr;
|
||||
int opt;
|
||||
|
||||
while (--argc > 0 && **++argv == '-') {
|
||||
while (*++*argv) {
|
||||
switch (**argv) {
|
||||
case 'l':
|
||||
params.lflag = 1;
|
||||
break;
|
||||
case 'A':
|
||||
if ((--argc <= 0) ||
|
||||
(params.arch =
|
||||
genimg_get_arch_id (*++argv)) < 0)
|
||||
usage();
|
||||
goto NXTARG;
|
||||
case 'c':
|
||||
if (--argc <= 0)
|
||||
usage();
|
||||
params.comment = *++argv;
|
||||
goto NXTARG;
|
||||
case 'C':
|
||||
if ((--argc <= 0) ||
|
||||
(params.comp =
|
||||
genimg_get_comp_id (*++argv)) < 0)
|
||||
usage();
|
||||
goto NXTARG;
|
||||
case 'D':
|
||||
if (--argc <= 0)
|
||||
usage();
|
||||
params.dtc = *++argv;
|
||||
goto NXTARG;
|
||||
|
||||
case 'O':
|
||||
if ((--argc <= 0) ||
|
||||
(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:
|
||||
while ((opt = getopt(argc, argv,
|
||||
"a:A:cC:d:D:e:f:Fk:K:ln:O:rR:sT:vVx")) != -1) {
|
||||
switch (opt) {
|
||||
case 'l':
|
||||
params.lflag = 1;
|
||||
break;
|
||||
case 'A':
|
||||
params.arch = genimg_get_arch_id(optarg);
|
||||
if (params.arch < 0)
|
||||
usage();
|
||||
break;
|
||||
case 'c':
|
||||
params.comment = optarg;
|
||||
break;
|
||||
case 'C':
|
||||
params.comp = genimg_get_comp_id(optarg);
|
||||
if (params.comp < 0)
|
||||
usage();
|
||||
break;
|
||||
case 'D':
|
||||
params.dtc = optarg;
|
||||
break;
|
||||
case 'O':
|
||||
params.os = genimg_get_os_id(optarg);
|
||||
if (params.os < 0)
|
||||
usage();
|
||||
break;
|
||||
case 'T':
|
||||
params.type = genimg_get_type_id(optarg);
|
||||
if (params.type < 0) {
|
||||
show_image_types();
|
||||
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();
|
||||
params.imagefile = *argv;
|
||||
params.imagefile = argv[optind];
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue