Commit a02221f29deb88145f6a1494450a8b9d20c9d596
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 |
-
mentioned in commit 1b92ae
-
mentioned in commit 1b92ae
-
mentioned in commit 1b92ae
-
mentioned in commit 1b92ae
-
mentioned in commit 1b92ae
-
mentioned in commit 1b92ae
-
mentioned in commit 1b92ae
-
mentioned in commit 1b92ae
-
mentioned in commit 1b92ae
-
mentioned in commit 1b92ae
-
mentioned in commit 1b92ae
-
mentioned in commit 1b92ae
-
mentioned in commit 1b92ae
-
mentioned in commit 1b92ae
-
mentioned in commit 1b92ae
-
mentioned in commit 1b92ae
-
mentioned in commit 1b92ae
-
mentioned in commit 1b92ae
-
mentioned in commit 1b92ae
-
mentioned in commit 1b92ae
-
mentioned in commit 1b92ae
-
mentioned in commit 1b92ae
-
mentioned in commit 1b92ae
-
mentioned in commit 1b92ae
-
mentioned in commit 1b92ae
-
mentioned in commit 1b92ae
-
mentioned in commit 1b92ae
-
mentioned in commit 1b92ae
-
mentioned in commit 1b92ae