From a02221f29deb88145f6a1494450a8b9d20c9d596 Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Mon, 22 Feb 2016 22:55:34 -0700 Subject: [PATCH] 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 --- tools/mkimage.c | 231 +++++++++++++++++++++--------------------------- 1 file changed, 100 insertions(+), 131 deletions(-) diff --git a/tools/mkimage.c b/tools/mkimage.c index a465fa3852..f0cc53d423 100644 --- a/tools/mkimage.c +++ b/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]; }