Commit a02221f29deb88145f6a1494450a8b9d20c9d596

Authored by Simon Glass
Committed by Tom Rini
1 parent 0b443dee6b

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>

Showing 1 changed file with 101 additions and 132 deletions Side-by-side Diff

... ... @@ -70,144 +70,113 @@
70 70 static void process_args(int argc, char **argv)
71 71 {
72 72 char *ptr;
  73 + int opt;
73 74  
74   - while (--argc > 0 && **++argv == '-') {
75   - while (*++*argv) {
76   - switch (**argv) {
77   - case 'l':
78   - params.lflag = 1;
79   - break;
80   - case 'A':
81   - if ((--argc <= 0) ||
82   - (params.arch =
83   - genimg_get_arch_id (*++argv)) < 0)
84   - usage();
85   - goto NXTARG;
86   - case 'c':
87   - if (--argc <= 0)
88   - usage();
89   - params.comment = *++argv;
90   - goto NXTARG;
91   - case 'C':
92   - if ((--argc <= 0) ||
93   - (params.comp =
94   - genimg_get_comp_id (*++argv)) < 0)
95   - usage();
96   - goto NXTARG;
97   - case 'D':
98   - if (--argc <= 0)
99   - usage();
100   - params.dtc = *++argv;
101   - goto NXTARG;
102   -
103   - case 'O':
104   - if ((--argc <= 0) ||
105   - (params.os =
106   - genimg_get_os_id (*++argv)) < 0)
107   - usage();
108   - goto NXTARG;
109   - case 'T':
110   - params.type = -1;
111   - if (--argc >= 0 && argv[1]) {
112   - params.type =
113   - genimg_get_type_id(*++argv);
114   - }
115   - if (params.type < 0) {
116   - show_image_types();
117   - usage();
118   - }
119   - goto NXTARG;
120   - case 'a':
121   - if (--argc <= 0)
122   - usage();
123   - params.addr = strtoull(*++argv, &ptr, 16);
124   - if (*ptr) {
125   - fprintf (stderr,
126   - "%s: invalid load address %s\n",
127   - params.cmdname, *argv);
128   - exit (EXIT_FAILURE);
129   - }
130   - goto NXTARG;
131   - case 'd':
132   - if (--argc <= 0)
133   - usage();
134   - params.datafile = *++argv;
135   - params.dflag = 1;
136   - goto NXTARG;
137   - case 'e':
138   - if (--argc <= 0)
139   - usage();
140   - params.ep = strtoull(*++argv, &ptr, 16);
141   - if (*ptr) {
142   - fprintf (stderr,
143   - "%s: invalid entry point %s\n",
144   - params.cmdname, *argv);
145   - exit (EXIT_FAILURE);
146   - }
147   - params.eflag = 1;
148   - goto NXTARG;
149   - case 'f':
150   - if (--argc <= 0)
151   - usage();
152   - params.datafile = *++argv;
153   - /* no break */
154   - case 'F':
155   - /*
156   - * The flattened image tree (FIT) format
157   - * requires a flattened device tree image type
158   - */
159   - params.type = IH_TYPE_FLATDT;
160   - params.fflag = 1;
161   - goto NXTARG;
162   - case 'k':
163   - if (--argc <= 0)
164   - usage();
165   - params.keydir = *++argv;
166   - goto NXTARG;
167   - case 'K':
168   - if (--argc <= 0)
169   - usage();
170   - params.keydest = *++argv;
171   - goto NXTARG;
172   - case 'n':
173   - if (--argc <= 0)
174   - usage();
175   - params.imagename = *++argv;
176   - goto NXTARG;
177   - case 'r':
178   - params.require_keys = 1;
179   - break;
180   - case 'R':
181   - if (--argc <= 0)
182   - usage();
183   - /*
184   - * This entry is for the second configuration
185   - * file, if only one is not enough.
186   - */
187   - params.imagename2 = *++argv;
188   - goto NXTARG;
189   - case 's':
190   - params.skipcpy = 1;
191   - break;
192   - case 'v':
193   - params.vflag++;
194   - break;
195   - case 'V':
196   - printf("mkimage version %s\n", PLAIN_VERSION);
197   - exit(EXIT_SUCCESS);
198   - case 'x':
199   - params.xflag++;
200   - break;
201   - default:
  75 + while ((opt = getopt(argc, argv,
  76 + "a:A:cC:d:D:e:f:Fk:K:ln:O:rR:sT:vVx")) != -1) {
  77 + switch (opt) {
  78 + case 'l':
  79 + params.lflag = 1;
  80 + break;
  81 + case 'A':
  82 + params.arch = genimg_get_arch_id(optarg);
  83 + if (params.arch < 0)
202 84 usage();
  85 + break;
  86 + case 'c':
  87 + params.comment = optarg;
  88 + break;
  89 + case 'C':
  90 + params.comp = genimg_get_comp_id(optarg);
  91 + if (params.comp < 0)
  92 + usage();
  93 + break;
  94 + case 'D':
  95 + params.dtc = optarg;
  96 + break;
  97 + case 'O':
  98 + params.os = genimg_get_os_id(optarg);
  99 + if (params.os < 0)
  100 + usage();
  101 + break;
  102 + case 'T':
  103 + params.type = genimg_get_type_id(optarg);
  104 + if (params.type < 0) {
  105 + show_image_types();
  106 + usage();
203 107 }
  108 + break;
  109 + case 'a':
  110 + params.addr = strtoull(optarg, &ptr, 16);
  111 + if (*ptr) {
  112 + fprintf(stderr, "%s: invalid load address %s\n",
  113 + params.cmdname, optarg);
  114 + exit(EXIT_FAILURE);
  115 + }
  116 + break;
  117 + case 'd':
  118 + params.datafile = optarg;
  119 + params.dflag = 1;
  120 + break;
  121 + case 'e':
  122 + params.ep = strtoull(optarg, &ptr, 16);
  123 + if (*ptr) {
  124 + fprintf(stderr, "%s: invalid entry point %s\n",
  125 + params.cmdname, optarg);
  126 + exit(EXIT_FAILURE);
  127 + }
  128 + params.eflag = 1;
  129 + break;
  130 + case 'f':
  131 + params.datafile = optarg;
  132 + /* no break */
  133 + case 'F':
  134 + /*
  135 + * The flattened image tree (FIT) format
  136 + * requires a flattened device tree image type
  137 + */
  138 + params.type = IH_TYPE_FLATDT;
  139 + params.fflag = 1;
  140 + break;
  141 + case 'k':
  142 + params.keydir = optarg;
  143 + break;
  144 + case 'K':
  145 + params.keydest = optarg;
  146 + break;
  147 + case 'n':
  148 + params.imagename = optarg;
  149 + break;
  150 + case 'r':
  151 + params.require_keys = 1;
  152 + break;
  153 + case 'R':
  154 + /*
  155 + * This entry is for the second configuration
  156 + * file, if only one is not enough.
  157 + */
  158 + params.imagename2 = optarg;
  159 + break;
  160 + case 's':
  161 + params.skipcpy = 1;
  162 + break;
  163 + case 'v':
  164 + params.vflag++;
  165 + break;
  166 + case 'V':
  167 + printf("mkimage version %s\n", PLAIN_VERSION);
  168 + exit(EXIT_SUCCESS);
  169 + case 'x':
  170 + params.xflag++;
  171 + break;
  172 + default:
  173 + usage();
204 174 }
205   -NXTARG: ;
206 175 }
207 176  
208   - if (argc != 1)
  177 + if (optind >= argc)
209 178 usage();
210   - params.imagefile = *argv;
  179 + params.imagefile = argv[optind];
211 180 }
212 181  
213 182