Commit 2c0dc990202c69a6231122ec2463c4e3076a16f3

Authored by Frans Meulenbroeks
Committed by Heiko Schocher
1 parent a266fe955a

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

... ... @@ -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 /*