From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from tango.tkos.co.il ([62.219.50.35]) by bombadil.infradead.org with esmtps (Exim 4.72 #1 (Red Hat Linux)) id 1Ogzn4-0000qR-Pk for barebox@lists.infradead.org; Thu, 05 Aug 2010 12:43:20 +0000 Date: Thu, 5 Aug 2010 15:43:07 +0300 From: Baruch Siach Message-ID: <20100805124307.GC3004@jasper.tkos.co.il> References: <20100805122349.GC24069@game.jcrosoft.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20100805122349.GC24069@game.jcrosoft.org> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: barebox-bounces@lists.infradead.org Errors-To: barebox-bounces+u.kleine-koenig=pengutronix.de@lists.infradead.org Subject: Re: [PATCH 1/2] misc: introduce string_to_bin To: Jean-Christophe PLAGNIOL-VILLARD Cc: barebox@lists.infradead.org Hi Jean-Christophe, On Thu, Aug 05, 2010 at 02:23:49PM +0200, Jean-Christophe PLAGNIOL-VILLARD wrote: > how about use the kernel printf format instead How can I use printf to convert a string representation to binary? baruch > On 14:23 Thu 05 Aug , Baruch Siach wrote: > > Factor out string_to_bin from string_to_ethaddr. string_to_bin is useful for > > other hex data strings. > > > > Signed-off-by: Baruch Siach > > --- > > include/common.h | 1 + > > lib/misc.c | 29 +++++++++++++++++++++++++++++ > > net/net.c | 17 +---------------- > > 3 files changed, 31 insertions(+), 16 deletions(-) > > > > diff --git a/include/common.h b/include/common.h > > index 0edc778..f600eb0 100644 > > --- a/include/common.h > > +++ b/include/common.h > > @@ -127,6 +127,7 @@ struct memarea_info { > > > > int spec_str_to_info(const char *str, struct memarea_info *info); > > int parse_area_spec(const char *str, ulong *start, ulong *size); > > +int string_to_bin(const char *str, u8 *buf, unsigned int buflen); > > > > /* Just like simple_strtoul(), but this one honors a K/M/G suffix */ > > unsigned long strtoul_suffix(const char *str, char **endp, int base); > > diff --git a/lib/misc.c b/lib/misc.c > > index 549b960..7735725 100644 > > --- a/lib/misc.c > > +++ b/lib/misc.c > > @@ -107,3 +107,32 @@ int parse_area_spec(const char *str, ulong *start, ulong *size) > > return -1; > > } > > EXPORT_SYMBOL(parse_area_spec); > > + > > +/* > > + * This function parses strings in the form "xx:xx:xx...", where x is an > > + * hexadecimal digit. > > + */ > > +int string_to_bin(const char *str, u8 *buf, unsigned int buflen) > > +{ > > + int i; > > + char *e; > > + > > + if (!str || strlen(str) != buflen*3 - 1) > > + return -1; > > + > > + for (i = 0; i < buflen-1; i++) > > + if (str[i*3 + 2] != ':') > > + return -1; > > + > > + for (i = 0; str[i]; i++) > > + if (!isxdigit(str[i]) && !(str[i] == ':')) > > + return -1; > > + > > + for (i = 0; i < buflen; i++) { > > + buf[i] = simple_strtoul(str, &e, 16); > > + str = e + 1; > > + } > > + > > + return 0; > > +} > > +EXPORT_SYMBOL(string_to_bin); > > diff --git a/net/net.c b/net/net.c > > index 8d99595..017de8b 100644 > > --- a/net/net.c > > +++ b/net/net.c > > @@ -161,22 +161,7 @@ void print_IPaddr (IPaddr_t x) > > > > int string_to_ethaddr(const char *str, char *enetaddr) > > { > > - int reg; > > - char *e; > > - > > - if (!str || strlen(str) != 17) > > - return -1; > > - > > - if (str[2] != ':' || str[5] != ':' || str[8] != ':' || > > - str[11] != ':' || str[14] != ':') > > - return -1; > > - > > - for (reg = 0; reg < 6; ++reg) { > > - enetaddr[reg] = simple_strtoul (str, &e, 16); > > - str = e + 1; > > - } > > - > > - return 0; > > + return string_to_bin(str, enetaddr, 6); > > } > > > > void ethaddr_to_string(const unsigned char *enetaddr, char *str) > > -- > > 1.7.1 -- ~. .~ Tk Open Systems =}------------------------------------------------ooO--U--Ooo------------{= - baruch@tkos.co.il - tel: +972.2.679.5364, http://www.tkos.co.il - _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox