* [PATCH 12/12] net: use the common ascii hex helpers @ 2008-05-02 19:01 Harvey Harrison 2008-05-02 23:25 ` David Miller 0 siblings, 1 reply; 10+ messages in thread From: Harvey Harrison @ 2008-05-02 19:01 UTC (permalink / raw) To: Andrew Morton; +Cc: LKML Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com> --- drivers/net/skfp/smt.c | 13 ++++++------- net/ipv4/netfilter/ipt_CLUSTERIP.c | 5 ++--- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/drivers/net/skfp/smt.c b/drivers/net/skfp/smt.c index ffbfb1b..805383b 100644 --- a/drivers/net/skfp/smt.c +++ b/drivers/net/skfp/smt.c @@ -19,6 +19,7 @@ #include "h/smc.h" #include "h/smt_p.h" #include <linux/bitrev.h> +#include <linux/kernel.h> #define KERNEL #include "h/smtstate.h" @@ -1730,20 +1731,18 @@ void fddi_send_antc(struct s_smc *smc, struct fddi_addr *dest) #endif #ifdef DEBUG -#define hextoasc(x) "0123456789abcdef"[x] - char *addr_to_string(struct fddi_addr *addr) { int i ; static char string[6*3] = "****" ; for (i = 0 ; i < 6 ; i++) { - string[i*3] = hextoasc((addr->a[i]>>4)&0xf) ; - string[i*3+1] = hextoasc((addr->a[i])&0xf) ; - string[i*3+2] = ':' ; + string[i * 3] = hex_asc_hi(addr->a[i]); + string[i * 3 + 1] = hex_asc_lo(addr->a[i]); + string[i * 3 + 2] = ':'; } - string[5*3+2] = 0 ; - return(string) ; + string[5 * 3 + 2] = 0; + return(string); } #endif diff --git a/net/ipv4/netfilter/ipt_CLUSTERIP.c b/net/ipv4/netfilter/ipt_CLUSTERIP.c index 22d8e7c..30b11a7 100644 --- a/net/ipv4/netfilter/ipt_CLUSTERIP.c +++ b/net/ipv4/netfilter/ipt_CLUSTERIP.c @@ -475,11 +475,10 @@ static void arp_print(struct arp_payload *payload) #define HBUFFERLEN 30 char hbuffer[HBUFFERLEN]; int j,k; - const char hexbuf[]= "0123456789abcdef"; for (k=0, j=0; k < HBUFFERLEN-3 && j < ETH_ALEN; j++) { - hbuffer[k++]=hexbuf[(payload->src_hw[j]>>4)&15]; - hbuffer[k++]=hexbuf[payload->src_hw[j]&15]; + hbuffer[k++] = hex_asc_hi(payload->src_hw[j]); + hbuffer[k++] = hex_asc_lo(payload->src_hw[j]); hbuffer[k++]=':'; } hbuffer[--k]='\0'; -- 1.5.5.1.350.gbbbf ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 12/12] net: use the common ascii hex helpers 2008-05-02 19:01 [PATCH 12/12] net: use the common ascii hex helpers Harvey Harrison @ 2008-05-02 23:25 ` David Miller 2008-05-02 23:31 ` Andrew Morton 0 siblings, 1 reply; 10+ messages in thread From: David Miller @ 2008-05-02 23:25 UTC (permalink / raw) To: harvey.harrison; +Cc: akpm, linux-kernel From: Harvey Harrison <harvey.harrison@gmail.com> Date: Fri, 02 May 2008 12:01:56 -0700 > Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com> Acked-by: David S. Miller <davem@davemloft.net> This has to go in via who ever adds the first patch with the actual helpers, so I won't apply this one. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 12/12] net: use the common ascii hex helpers 2008-05-02 23:25 ` David Miller @ 2008-05-02 23:31 ` Andrew Morton 2008-05-02 23:39 ` David Miller 2008-05-02 23:52 ` Harvey Harrison 0 siblings, 2 replies; 10+ messages in thread From: Andrew Morton @ 2008-05-02 23:31 UTC (permalink / raw) To: David Miller; +Cc: harvey.harrison, linux-kernel On Fri, 02 May 2008 16:25:15 -0700 (PDT) David Miller <davem@davemloft.net> wrote: > From: Harvey Harrison <harvey.harrison@gmail.com> > Date: Fri, 02 May 2008 12:01:56 -0700 > > > Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com> > > Acked-by: David S. Miller <davem@davemloft.net> > > This has to go in via who ever adds the first patch > with the actual helpers, so I won't apply this one. Yup. After a bit of testing and tyre-kicking I'll probably slip lib-add-ascii-hex-helper-functions.patch into mainline so that we can trickle all the *-use-the-common-ascii-hex-helpers.patch patches out to the various maintainers. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 12/12] net: use the common ascii hex helpers 2008-05-02 23:31 ` Andrew Morton @ 2008-05-02 23:39 ` David Miller 2008-05-02 23:43 ` Andrew Morton 2008-05-02 23:52 ` Harvey Harrison 1 sibling, 1 reply; 10+ messages in thread From: David Miller @ 2008-05-02 23:39 UTC (permalink / raw) To: akpm; +Cc: harvey.harrison, linux-kernel From: Andrew Morton <akpm@linux-foundation.org> Date: Fri, 2 May 2008 16:31:31 -0700 > On Fri, 02 May 2008 16:25:15 -0700 (PDT) > David Miller <davem@davemloft.net> wrote: > > > From: Harvey Harrison <harvey.harrison@gmail.com> > > Date: Fri, 02 May 2008 12:01:56 -0700 > > > > > Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com> > > > > Acked-by: David S. Miller <davem@davemloft.net> > > > > This has to go in via who ever adds the first patch > > with the actual helpers, so I won't apply this one. > > Yup. After a bit of testing and tyre-kicking I'll probably slip > lib-add-ascii-hex-helper-functions.patch into mainline so that we can > trickle all the *-use-the-common-ascii-hex-helpers.patch patches out to the > various maintainers. Please just slurp this networking one in with that, if you would be so kind. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 12/12] net: use the common ascii hex helpers 2008-05-02 23:39 ` David Miller @ 2008-05-02 23:43 ` Andrew Morton 0 siblings, 0 replies; 10+ messages in thread From: Andrew Morton @ 2008-05-02 23:43 UTC (permalink / raw) To: David Miller; +Cc: harvey.harrison, linux-kernel On Fri, 02 May 2008 16:39:44 -0700 (PDT) David Miller <davem@davemloft.net> wrote: > From: Andrew Morton <akpm@linux-foundation.org> > Date: Fri, 2 May 2008 16:31:31 -0700 > > > On Fri, 02 May 2008 16:25:15 -0700 (PDT) > > David Miller <davem@davemloft.net> wrote: > > > > > From: Harvey Harrison <harvey.harrison@gmail.com> > > > Date: Fri, 02 May 2008 12:01:56 -0700 > > > > > > > Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com> > > > > > > Acked-by: David S. Miller <davem@davemloft.net> > > > > > > This has to go in via who ever adds the first patch > > > with the actual helpers, so I won't apply this one. > > > > Yup. After a bit of testing and tyre-kicking I'll probably slip > > lib-add-ascii-hex-helper-functions.patch into mainline so that we can > > trickle all the *-use-the-common-ascii-hex-helpers.patch patches out to the > > various maintainers. > > Please just slurp this networking one in with that, if you > would be so kind. No probs. Always happy to do that - more people should tell me "stop being an ass and just merge it" ;) ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 12/12] net: use the common ascii hex helpers 2008-05-02 23:31 ` Andrew Morton 2008-05-02 23:39 ` David Miller @ 2008-05-02 23:52 ` Harvey Harrison 2008-05-03 0:08 ` Andrew Morton 1 sibling, 1 reply; 10+ messages in thread From: Harvey Harrison @ 2008-05-02 23:52 UTC (permalink / raw) To: Andrew Morton; +Cc: David Miller, linux-kernel On Fri, 2008-05-02 at 16:31 -0700, Andrew Morton wrote: > On Fri, 02 May 2008 16:25:15 -0700 (PDT) > David Miller <davem@davemloft.net> wrote: > > > From: Harvey Harrison <harvey.harrison@gmail.com> > > Date: Fri, 02 May 2008 12:01:56 -0700 > > > > > Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com> > > > > Acked-by: David S. Miller <davem@davemloft.net> > > > > This has to go in via who ever adds the first patch > > with the actual helpers, so I won't apply this one. > > Yup. After a bit of testing and tyre-kicking I'll probably slip > lib-add-ascii-hex-helper-functions.patch into mainline so that we can > trickle all the *-use-the-common-ascii-hex-helpers.patch patches out to the > various maintainers. > I suppose the hex_asc array and hex_to_int could also use EXPORT_SYMBOL(). Also, As I've looked further around the tree, there seem to be a lot of hex_to_int/long variants around the tree, so what I'm thinking is the current hex_to_int becomes hex_to_u8 and I'll add a: /** * hex_to_u32 - read a u32 from a char buffer * @buf: buffer to read ascii chars from * @val: where to put the u32 * * Read hex-ascii chars into a u32. Return the number of chars read. * A maximum of 8 chars will be read, if a char not in [a-f][A-F][0-9] * is encountered, the function returns. */ int hex_to_u32(const char *buf, u32 *val) Similar to the above, but a max of 16 chars will be read. int hex_to_u64(const char *buf, u64 *val) If this api is better, I suppose: int hex_to_u8 - max of two chars int hex_to_u16 - max of 4 int hex_to_u32 - max of 8 int hex_to_u64 - max of 16 Could be added around a common function that takes the max length as an additional arg. Thoughts? Harvey ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 12/12] net: use the common ascii hex helpers 2008-05-02 23:52 ` Harvey Harrison @ 2008-05-03 0:08 ` Andrew Morton 2008-05-03 0:11 ` Harvey Harrison 2008-05-03 0:15 ` Harvey Harrison 0 siblings, 2 replies; 10+ messages in thread From: Andrew Morton @ 2008-05-03 0:08 UTC (permalink / raw) To: Harvey Harrison; +Cc: davem, linux-kernel On Fri, 02 May 2008 16:52:43 -0700 Harvey Harrison <harvey.harrison@gmail.com> wrote: > On Fri, 2008-05-02 at 16:31 -0700, Andrew Morton wrote: > > On Fri, 02 May 2008 16:25:15 -0700 (PDT) > > David Miller <davem@davemloft.net> wrote: > > > > > From: Harvey Harrison <harvey.harrison@gmail.com> > > > Date: Fri, 02 May 2008 12:01:56 -0700 > > > > > > > Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com> > > > > > > Acked-by: David S. Miller <davem@davemloft.net> > > > > > > This has to go in via who ever adds the first patch > > > with the actual helpers, so I won't apply this one. > > > > Yup. After a bit of testing and tyre-kicking I'll probably slip > > lib-add-ascii-hex-helper-functions.patch into mainline so that we can > > trickle all the *-use-the-common-ascii-hex-helpers.patch patches out to the > > various maintainers. > > > > I suppose the hex_asc array and hex_to_int could also use > EXPORT_SYMBOL(). gack. How could you do all those patches without discovering this? Please go give your QA staff a wedgie. --- a/lib/hexdump.c~lib-add-ascii-hex-helper-functions-fix +++ a/lib/hexdump.c @@ -13,6 +13,7 @@ #include <linux/module.h> const char hex_asc[] = "0123456789abcdef"; +EXPORT_SYMBOL(hex_asc); /** * hex_to_int - convert a single hex ASCII char to an integer value @@ -32,6 +33,7 @@ int hex_to_int(char ch) return ch - '0'; return -1; } +EXPORT_SYMBOL(hex_to_int); /** * hex_dump_to_buffer - convert a blob of data to "hex ASCII" in memory _ > Also, As I've looked further around the tree, there seem to be a lot > of hex_to_int/long variants around the tree, so what I'm thinking is > the current hex_to_int becomes hex_to_u8 and I'll add a: > > /** > * hex_to_u32 - read a u32 from a char buffer > * @buf: buffer to read ascii chars from > * @val: where to put the u32 > * > * Read hex-ascii chars into a u32. Return the number of chars read. > * A maximum of 8 chars will be read, if a char not in [a-f][A-F][0-9] > * is encountered, the function returns. > */ > int hex_to_u32(const char *buf, u32 *val) > > Similar to the above, but a max of 16 chars will be read. > int hex_to_u64(const char *buf, u64 *val) > > If this api is better, I suppose: > > int hex_to_u8 - max of two chars > int hex_to_u16 - max of 4 > int hex_to_u32 - max of 8 > int hex_to_u64 - max of 16 > > Could be added around a common function that takes the max length as > an additional arg. > yes, hex_to_u8() is more specific and better defined than hex_to_int(). Although anally it should perhaps be two_digit_hex_to_ulong, four_digit_hex_to_ulong, etc. ho hum, I'll drop them all. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 12/12] net: use the common ascii hex helpers 2008-05-03 0:08 ` Andrew Morton @ 2008-05-03 0:11 ` Harvey Harrison 2008-05-03 0:15 ` Harvey Harrison 1 sibling, 0 replies; 10+ messages in thread From: Harvey Harrison @ 2008-05-03 0:11 UTC (permalink / raw) To: Andrew Morton; +Cc: davem, linux-kernel On Fri, 2008-05-02 at 17:08 -0700, Andrew Morton wrote: > On Fri, 02 May 2008 16:52:43 -0700 > Harvey Harrison <harvey.harrison@gmail.com> wrote: > > > On Fri, 2008-05-02 at 16:31 -0700, Andrew Morton wrote: > > > On Fri, 02 May 2008 16:25:15 -0700 (PDT) > > > David Miller <davem@davemloft.net> wrote: > > > > > > > From: Harvey Harrison <harvey.harrison@gmail.com> > > > > Date: Fri, 02 May 2008 12:01:56 -0700 > > > > > > > > > Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com> > > > > > > > > Acked-by: David S. Miller <davem@davemloft.net> > > > > > > > > This has to go in via who ever adds the first patch > > > > with the actual helpers, so I won't apply this one. > > > > > > Yup. After a bit of testing and tyre-kicking I'll probably slip > > > lib-add-ascii-hex-helper-functions.patch into mainline so that we can > > > trickle all the *-use-the-common-ascii-hex-helpers.patch patches out to the > > > various maintainers. > > > > > > > I suppose the hex_asc array and hex_to_int could also use > > EXPORT_SYMBOL(). > > gack. How could you do all those patches without discovering this? Please > go give your QA staff a wedgie. allyesconfig :( > > > > yes, hex_to_u8() is more specific and better defined than hex_to_int(). > > Although anally it should perhaps be two_digit_hex_to_ulong, > four_digit_hex_to_ulong, etc. > > ho hum, I'll drop them all. My apologies, how about: int hex_char_to_int(char ch) int hex_char_to_int(char ch) int hex_char_to_int(char ch) EXPORT_SYMBOL(hex_dump_to_buffer); ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 12/12] net: use the common ascii hex helpers 2008-05-03 0:08 ` Andrew Morton 2008-05-03 0:11 ` Harvey Harrison @ 2008-05-03 0:15 ` Harvey Harrison 2008-05-03 0:30 ` Andrew Morton 1 sibling, 1 reply; 10+ messages in thread From: Harvey Harrison @ 2008-05-03 0:15 UTC (permalink / raw) To: Andrew Morton; +Cc: davem, linux-kernel On Fri, 2008-05-02 at 17:08 -0700, Andrew Morton wrote: > > > Yup. After a bit of testing and tyre-kicking I'll probably slip > > > lib-add-ascii-hex-helper-functions.patch into mainline so that we can > > > trickle all the *-use-the-common-ascii-hex-helpers.patch patches out to the > > > various maintainers. > > > > > > > I suppose the hex_asc array and hex_to_int could also use > > EXPORT_SYMBOL(). > > gack. How could you do all those patches without discovering this? Please > go give your QA staff a wedgie. Sorry about the fat-fingered send, as before: allyesconfig :( > yes, hex_to_u8() is more specific and better defined than hex_to_int(). > > Although anally it should perhaps be two_digit_hex_to_ulong, > four_digit_hex_to_ulong, etc. > > ho hum, I'll drop them all. int hex_char_to_int(char ch) { return -1 if not [a-fA-F0-9] } int hex_to_u8(const char *buf, u8 *val) int hex_to_u16(const char *buf, u16 *val) int hex_to_u32(const char *buf, u32 *val) int hex_to_u64(const char *buf, u64 *val) Which return the number of chars read and reads up to a maximum of 2,4,8,16 chars respectively and returns early if a non-hex char is encountered. Thoughts? Harvey ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 12/12] net: use the common ascii hex helpers 2008-05-03 0:15 ` Harvey Harrison @ 2008-05-03 0:30 ` Andrew Morton 0 siblings, 0 replies; 10+ messages in thread From: Andrew Morton @ 2008-05-03 0:30 UTC (permalink / raw) To: Harvey Harrison; +Cc: davem, linux-kernel On Fri, 02 May 2008 17:15:55 -0700 Harvey Harrison <harvey.harrison@gmail.com> wrote: > int hex_char_to_int(char ch) > { > return -1 if not [a-fA-F0-9] > } > > int hex_to_u8(const char *buf, u8 *val) > int hex_to_u16(const char *buf, u16 *val) > int hex_to_u32(const char *buf, u32 *val) > int hex_to_u64(const char *buf, u64 *val) > > Which return the number of chars read and reads up to a maximum of > 2,4,8,16 chars respectively and returns early if a non-hex char > is encountered. > > Thoughts? I dunno. Return-by-reference is a bit nasty and forces the compiler to generate extra code to put local storage into a stack slot rather than keeping it in a register. Does anyone actually test whether hex_to_foo returns -1? Probably not many. In which case it might be better to do u64 hex_to_u64(const char *buf); and, if we encounter a non-hex char, do a WARN_ON(1). One could legitimately do int c = hex_to_int(some_user_input); if (c < 0) { printk("user: you're an idiot\n"); } to perform validation and conversion in a single operation but I expect that such code is in the minority, and could be covered by running a separate bool is_hex_string(const char *bug, size_t nchars); beforehand? ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2008-05-03 0:30 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-05-02 19:01 [PATCH 12/12] net: use the common ascii hex helpers Harvey Harrison 2008-05-02 23:25 ` David Miller 2008-05-02 23:31 ` Andrew Morton 2008-05-02 23:39 ` David Miller 2008-05-02 23:43 ` Andrew Morton 2008-05-02 23:52 ` Harvey Harrison 2008-05-03 0:08 ` Andrew Morton 2008-05-03 0:11 ` Harvey Harrison 2008-05-03 0:15 ` Harvey Harrison 2008-05-03 0:30 ` Andrew Morton
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox