From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heiko Schocher Date: Tue, 23 Mar 2010 07:26:54 +0100 Subject: [U-Boot] RFC: factor out common i2c code In-Reply-To: <20100322213152.B43464C022@gemini.denx.de> References: <20100322213152.B43464C022@gemini.denx.de> Message-ID: <4BA85F2E.5070302@invitel.hu> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hello Wolfgang, Wolfgang Denk wrote: > Dear Frans Meulenbroeks, > > In message you wrote: >> 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: > > Thanks for digging into this. > >> 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). > > A function with 5 arguments makes not much sense for for such a > relatively simple piece of code. > >> 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; >> } > > Eventually you move the cmd_usage() usage callout of the function so > you can get rid of the second argument. > >> and call it by something like >> >> alen = get_alen(argv[2]); >> if (alen < 0) return alen; /* or return -1 */ > > if (alen < 0) { > cmd_usage(cmdtp); > return -1; > } > > or even use a common error exit like > > if (alen < 0) > goto errout; I vote for: alen = get_alen(argv[2]); if (alen < 0) goto errout; bye Heiko