Commit 2c0dc990202c69a6231122ec2463c4e3076a16f3
Committed by
Heiko Schocher
1 parent
a266fe955a
Exists in
master
and in
54 other branches
cmd_i2c: introduced get_alen helper function
The code to parse alen appeared 6 times in the function. Factored this out in a small helper function Signed-off-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
Showing 1 changed file with 47 additions and 72 deletions Side-by-side Diff
common/cmd_i2c.c
... | ... | @@ -151,6 +151,29 @@ |
151 | 151 | __attribute__((weak, alias("__def_i2c_set_bus_speed"))); |
152 | 152 | |
153 | 153 | /* |
154 | + * get_alen: small parser helper function to get address length | |
155 | + * returns the address length,or 0 on error | |
156 | + */ | |
157 | +static uint get_alen(char *arg) | |
158 | +{ | |
159 | + int j; | |
160 | + int alen; | |
161 | + | |
162 | + alen = 1; | |
163 | + for (j = 0; j < 8; j++) { | |
164 | + if (arg[j] == '.') { | |
165 | + alen = arg[j+1] - '0'; | |
166 | + if (alen > 3) { | |
167 | + return 0; | |
168 | + } | |
169 | + break; | |
170 | + } else if (arg[j] == '\0') | |
171 | + break; | |
172 | + } | |
173 | + return alen; | |
174 | +} | |
175 | + | |
176 | +/* | |
154 | 177 | * Syntax: |
155 | 178 | * i2c read {i2c_chip} {devaddr}{.0, .1, .2} {len} {memaddr} |
156 | 179 | */ |
... | ... | @@ -160,7 +183,6 @@ |
160 | 183 | u_char chip; |
161 | 184 | uint devaddr, alen, length; |
162 | 185 | u_char *memaddr; |
163 | - int j; | |
164 | 186 | |
165 | 187 | if (argc != 5) { |
166 | 188 | cmd_usage(cmdtp); |
... | ... | @@ -177,17 +199,10 @@ |
177 | 199 | * 2 bytes long. Some day it might be 3 bytes long :-). |
178 | 200 | */ |
179 | 201 | devaddr = simple_strtoul(argv[2], NULL, 16); |
180 | - alen = 1; | |
181 | - for (j = 0; j < 8; j++) { | |
182 | - if (argv[2][j] == '.') { | |
183 | - alen = argv[2][j+1] - '0'; | |
184 | - if (alen > 3) { | |
185 | - cmd_usage(cmdtp); | |
186 | - return 1; | |
187 | - } | |
188 | - break; | |
189 | - } else if (argv[2][j] == '\0') | |
190 | - break; | |
202 | + alen = get_alen(argv[2]); | |
203 | + if (alen == 0) { | |
204 | + cmd_usage(cmdtp); | |
205 | + return 1; | |
191 | 206 | } |
192 | 207 | |
193 | 208 | /* |
... | ... | @@ -234,7 +249,6 @@ |
234 | 249 | /* |
235 | 250 | * New command specified. |
236 | 251 | */ |
237 | - alen = 1; | |
238 | 252 | |
239 | 253 | /* |
240 | 254 | * I2C chip address |
... | ... | @@ -246,17 +260,10 @@ |
246 | 260 | * 2 bytes long. Some day it might be 3 bytes long :-). |
247 | 261 | */ |
248 | 262 | addr = simple_strtoul(argv[2], NULL, 16); |
249 | - alen = 1; | |
250 | - for (j = 0; j < 8; j++) { | |
251 | - if (argv[2][j] == '.') { | |
252 | - alen = argv[2][j+1] - '0'; | |
253 | - if (alen > 3) { | |
254 | - cmd_usage(cmdtp); | |
255 | - return 1; | |
256 | - } | |
257 | - break; | |
258 | - } else if (argv[2][j] == '\0') | |
259 | - break; | |
263 | + alen = get_alen(argv[2]); | |
264 | + if (alen == 0) { | |
265 | + cmd_usage(cmdtp); | |
266 | + return 1; | |
260 | 267 | } |
261 | 268 | |
262 | 269 | /* |
... | ... | @@ -324,7 +331,6 @@ |
324 | 331 | uint alen; |
325 | 332 | uchar byte; |
326 | 333 | int count; |
327 | - int j; | |
328 | 334 | |
329 | 335 | if ((argc < 4) || (argc > 5)) { |
330 | 336 | cmd_usage(cmdtp); |
... | ... | @@ -340,17 +346,10 @@ |
340 | 346 | * Address is always specified. |
341 | 347 | */ |
342 | 348 | addr = simple_strtoul(argv[2], NULL, 16); |
343 | - alen = 1; | |
344 | - for (j = 0; j < 8; j++) { | |
345 | - if (argv[2][j] == '.') { | |
346 | - alen = argv[2][j+1] - '0'; | |
347 | - if (alen > 3) { | |
348 | - cmd_usage(cmdtp); | |
349 | - return 1; | |
350 | - } | |
351 | - break; | |
352 | - } else if (argv[2][j] == '\0') | |
353 | - break; | |
349 | + alen = get_alen(argv[2]); | |
350 | + if (alen == 0) { | |
351 | + cmd_usage(cmdtp); | |
352 | + return 1; | |
354 | 353 | } |
355 | 354 | |
356 | 355 | /* |
... | ... | @@ -398,7 +397,6 @@ |
398 | 397 | uchar byte; |
399 | 398 | ulong crc; |
400 | 399 | ulong err; |
401 | - int j; | |
402 | 400 | |
403 | 401 | if (argc < 4) { |
404 | 402 | cmd_usage(cmdtp); |
... | ... | @@ -414,17 +412,10 @@ |
414 | 412 | * Address is always specified. |
415 | 413 | */ |
416 | 414 | addr = simple_strtoul(argv[2], NULL, 16); |
417 | - alen = 1; | |
418 | - for (j = 0; j < 8; j++) { | |
419 | - if (argv[2][j] == '.') { | |
420 | - alen = argv[2][j+1] - '0'; | |
421 | - if (alen > 3) { | |
422 | - cmd_usage(cmdtp); | |
423 | - return 1; | |
424 | - } | |
425 | - break; | |
426 | - } else if (argv[2][j] == '\0') | |
427 | - break; | |
415 | + alen = get_alen(argv[2]); | |
416 | + if (alen == 0) { | |
417 | + cmd_usage(cmdtp); | |
418 | + return 1; | |
428 | 419 | } |
429 | 420 | |
430 | 421 | /* |
... | ... | @@ -469,7 +460,6 @@ |
469 | 460 | ulong data; |
470 | 461 | int size = 1; |
471 | 462 | int nbytes; |
472 | - int j; | |
473 | 463 | extern char console_buffer[]; |
474 | 464 | |
475 | 465 | if (argc != 3) { |
... | ... | @@ -504,17 +494,10 @@ |
504 | 494 | * Address is always specified. |
505 | 495 | */ |
506 | 496 | addr = simple_strtoul(argv[2], NULL, 16); |
507 | - alen = 1; | |
508 | - for (j = 0; j < 8; j++) { | |
509 | - if (argv[2][j] == '.') { | |
510 | - alen = argv[2][j+1] - '0'; | |
511 | - if (alen > 3) { | |
512 | - cmd_usage(cmdtp); | |
513 | - return 1; | |
514 | - } | |
515 | - break; | |
516 | - } else if (argv[2][j] == '\0') | |
517 | - break; | |
497 | + alen = get_alen(argv[2]); | |
498 | + if (alen == 0) { | |
499 | + cmd_usage(cmdtp); | |
500 | + return 1; | |
518 | 501 | } |
519 | 502 | } |
520 | 503 | |
... | ... | @@ -644,7 +627,6 @@ |
644 | 627 | uint length; |
645 | 628 | u_char bytes[16]; |
646 | 629 | int delay; |
647 | - int j; | |
648 | 630 | |
649 | 631 | if (argc < 3) { |
650 | 632 | cmd_usage(cmdtp); |
... | ... | @@ -660,17 +642,10 @@ |
660 | 642 | * Address is always specified. |
661 | 643 | */ |
662 | 644 | addr = simple_strtoul(argv[2], NULL, 16); |
663 | - alen = 1; | |
664 | - for (j = 0; j < 8; j++) { | |
665 | - if (argv[2][j] == '.') { | |
666 | - alen = argv[2][j+1] - '0'; | |
667 | - if (alen > 3) { | |
668 | - cmd_usage(cmdtp); | |
669 | - return 1; | |
670 | - } | |
671 | - break; | |
672 | - } else if (argv[2][j] == '\0') | |
673 | - break; | |
645 | + alen = get_alen(argv[2]); | |
646 | + if (alen == 0) { | |
647 | + cmd_usage(cmdtp); | |
648 | + return 1; | |
674 | 649 | } |
675 | 650 | |
676 | 651 | /* |