public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] RFC: factor out common i2c code
@ 2010-03-22 21:18 Frans Meulenbroeks
  2010-03-22 21:31 ` Wolfgang Denk
  0 siblings, 1 reply; 3+ messages in thread
From: Frans Meulenbroeks @ 2010-03-22 21:18 UTC (permalink / raw)
  To: u-boot

In cmd_i2c the following snippet of code appears 6 times so it would
be a good candidate to factor out into a static helper function:

        /*
         * I2C chip address
         */
        chip = simple_strtoul(argv[1], NULL, 16);

        /*
         * I2C data address within the chip.  This can be 1 or
         * 2 bytes long.  Some day it might be 3 bytes long :-).
         */
        devaddr = simple_strtoul(argv[2], NULL, 16);
        alen = 1;
        for (j = 0; j < 8; j++) {
                if (argv[2][j] == '.') {
                        alen = argv[2][j+1] - '0';
                        if (alen > 3) {
                                cmd_usage(cmdtp);
                                return 1;
                        }
                        break;
                } else if (argv[2][j] == '\0')
                        break;
        }

Now before I actually start doing that a few questions.
Should I factor out all lines and create a helper function with three
pointer arguments to contain the return values chip, devaddr and alen
(apart from argv and cmdptp which are input parameters).

Or would it be better to only factor out only the alen code and have a
function like:
int get_alen(char *str, cmd_tbl_t *cmdtp)
{
    int alen, j;
        alen = 1;
        for (j = 0; j < 8; j++) {
                if str[j] == '.') {
                        alen = str[j+1] - '0';
                        if (alen > 3) {
                                cmd_usage(cmdtp);
                                return -1;
                        }
                        break;
                } else if (str[j] == '\0')
                        break;
       return alen;
}

and call it by something like

   alen = get_alen(argv[2]);
   if (alen < 0) return alen; /* or return -1 */

Your opinion on the preferred solution is appreciated (and ofc keeping
the current code is also an option).

Frans

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2010-03-23  6:26 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-03-22 21:18 [U-Boot] RFC: factor out common i2c code Frans Meulenbroeks
2010-03-22 21:31 ` Wolfgang Denk
2010-03-23  6:26   ` Heiko Schocher

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox