public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/4] lib: add ascii hex helper functions
@ 2008-05-01 20:51 Harvey Harrison
  2008-05-01 21:15 ` Andrew Morton
  2008-05-01 21:28 ` Joe Perches
  0 siblings, 2 replies; 7+ messages in thread
From: Harvey Harrison @ 2008-05-01 20:51 UTC (permalink / raw)
  To: Andrew Morton; +Cc: LKML

Everyone rolls their own version around the tree, centralize
in lib/hexdump.c

Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com>
---
 include/linux/kernel.h |    6 +++++-
 lib/hexdump.c          |   25 +++++++++++++++++++++++--
 2 files changed, 28 insertions(+), 3 deletions(-)

diff --git a/include/linux/kernel.h b/include/linux/kernel.h
index 4d46e29..20cae9a 100644
--- a/include/linux/kernel.h
+++ b/include/linux/kernel.h
@@ -276,7 +276,11 @@ extern void print_hex_dump(const char *level, const char *prefix_str,
 				const void *buf, size_t len, bool ascii);
 extern void print_hex_dump_bytes(const char *prefix_str, int prefix_type,
 			const void *buf, size_t len);
-#define hex_asc(x)	"0123456789abcdef"[x]
+
+extern const char hex_asc[];
+extern int hex_to_int(char c);
+#define hex_asc_lo(x)	hex_asc[((x) & 0x0f)]
+#define hex_asc_hi(x)	hex_asc[((x) & 0xf0) >> 4]
 
 #define pr_emerg(fmt, arg...) \
 	printk(KERN_EMERG fmt, ##arg)
diff --git a/lib/hexdump.c b/lib/hexdump.c
index 3435465..3f96e76 100644
--- a/lib/hexdump.c
+++ b/lib/hexdump.c
@@ -12,6 +12,27 @@
 #include <linux/kernel.h>
 #include <linux/module.h>
 
+const char hexasc[16] = "0123456789abcdef";
+
+/**
+ * hex_to_int - convert a single hex ASCII char to an integer value
+ * @ch: char to convert, not case sensitive [a-f][A-F][0-9]
+ *
+ * Returns -1 if the char is not a valid hexadecimal character
+ */
+int hex_to_int(char ch)
+{
+	/*
+	 * Make ch lower-case, works only for digits and letters
+	 */
+	ch |= 0x20;
+	if (ch >= 'a' && ch <= 'f')
+		return ch - 'a' + 10;
+	if (ch >= '0' && ch <= '9')
+		return ch - '0';
+	return -1;
+}
+
 /**
  * hex_dump_to_buffer - convert a blob of data to "hex ASCII" in memory
  * @buf: data blob to dump
@@ -93,8 +114,8 @@ void hex_dump_to_buffer(const void *buf, size_t len, int rowsize,
 		for (j = 0; (j < rowsize) && (j < len) && (lx + 4) < linebuflen;
 		     j++) {
 			ch = ptr[j];
-			linebuf[lx++] = hex_asc(ch >> 4);
-			linebuf[lx++] = hex_asc(ch & 0x0f);
+			linebuf[lx++] = hex_asc_hi(ch);
+			linebuf[lx++] = hex_asc_lo(ch);
 			linebuf[lx++] = ' ';
 		}
 		ascii_column = 3 * rowsize + 2;
-- 
1.5.5.1.305.g7c84



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

* Re: [PATCH 1/4] lib: add ascii hex helper functions
  2008-05-01 20:51 [PATCH 1/4] lib: add ascii hex helper functions Harvey Harrison
@ 2008-05-01 21:15 ` Andrew Morton
  2008-05-01 21:32   ` Harvey Harrison
  2008-05-01 21:28 ` Joe Perches
  1 sibling, 1 reply; 7+ messages in thread
From: Andrew Morton @ 2008-05-01 21:15 UTC (permalink / raw)
  To: Harvey Harrison; +Cc: linux-kernel

On Thu, 01 May 2008 13:51:07 -0700
Harvey Harrison <harvey.harrison@gmail.com> wrote:

> Everyone rolls their own version around the tree, centralize
> in lib/hexdump.c
> 
> +extern const char hex_asc[];
> +const char hexasc[16] = "0123456789abcdef";

If I were a compiler I'd get upset about that.

Honest, 24 hours really doesn't matter here.  Do it carefully, do
it right.

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

* Re: [PATCH 1/4] lib: add ascii hex helper functions
  2008-05-01 20:51 [PATCH 1/4] lib: add ascii hex helper functions Harvey Harrison
  2008-05-01 21:15 ` Andrew Morton
@ 2008-05-01 21:28 ` Joe Perches
  2008-05-01 21:35   ` Harvey Harrison
  1 sibling, 1 reply; 7+ messages in thread
From: Joe Perches @ 2008-05-01 21:28 UTC (permalink / raw)
  To: Harvey Harrison; +Cc: Andrew Morton, LKML

On Thu, 2008-05-01 at 13:51 -0700, Harvey Harrison wrote:
> Everyone rolls their own version around the tree, centralize
> in lib/hexdump.c
> 
> Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com>
> ---
>  include/linux/kernel.h |    6 +++++-
>  lib/hexdump.c          |   25 +++++++++++++++++++++++--
>  2 files changed, 28 insertions(+), 3 deletions(-)
> 
> diff --git a/include/linux/kernel.h b/include/linux/kernel.h
> index 4d46e29..20cae9a 100644
> --- a/include/linux/kernel.h
> +++ b/include/linux/kernel.h
> @@ -276,7 +276,11 @@ extern void print_hex_dump(const char *level, const char *prefix_str,
>  				const void *buf, size_t len, bool ascii);
>  extern void print_hex_dump_bytes(const char *prefix_str, int prefix_type,
>  			const void *buf, size_t len);
> -#define hex_asc(x)	"0123456789abcdef"[x]
> +
> +extern const char hex_asc[];

I don't see a reason hex_asc should be extern.
It's only used by hexdump.
I think it better to remove hex_asc from kernel.h altogether.



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

* Re: [PATCH 1/4] lib: add ascii hex helper functions
  2008-05-01 21:15 ` Andrew Morton
@ 2008-05-01 21:32   ` Harvey Harrison
  0 siblings, 0 replies; 7+ messages in thread
From: Harvey Harrison @ 2008-05-01 21:32 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-kernel

On Thu, 2008-05-01 at 14:15 -0700, Andrew Morton wrote:
> On Thu, 01 May 2008 13:51:07 -0700
> Harvey Harrison <harvey.harrison@gmail.com> wrote:
> 
> > Everyone rolls their own version around the tree, centralize
> > in lib/hexdump.c
> > 
> > +extern const char hex_asc[];
> > +const char hexasc[16] = "0123456789abcdef";
> 
> If I were a compiler I'd get upset about that.
> 
> Honest, 24 hours really doesn't matter here.  Do it carefully, do
> it right.

...insert something here about improving quality ;-)


Harvey


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

* Re: [PATCH 1/4] lib: add ascii hex helper functions
  2008-05-01 21:28 ` Joe Perches
@ 2008-05-01 21:35   ` Harvey Harrison
  2008-05-01 21:44     ` Joe Perches
  0 siblings, 1 reply; 7+ messages in thread
From: Harvey Harrison @ 2008-05-01 21:35 UTC (permalink / raw)
  To: Joe Perches; +Cc: Andrew Morton, LKML

On Thu, 2008-05-01 at 14:28 -0700, Joe Perches wrote:
> On Thu, 2008-05-01 at 13:51 -0700, Harvey Harrison wrote:
> > Everyone rolls their own version around the tree, centralize
> > in lib/hexdump.c
> > 
> > Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com>
> > ---
> >  include/linux/kernel.h |    6 +++++-
> >  lib/hexdump.c          |   25 +++++++++++++++++++++++--
> >  2 files changed, 28 insertions(+), 3 deletions(-)
> > 
> > diff --git a/include/linux/kernel.h b/include/linux/kernel.h
> > index 4d46e29..20cae9a 100644
> > --- a/include/linux/kernel.h
> > +++ b/include/linux/kernel.h
> > @@ -276,7 +276,11 @@ extern void print_hex_dump(const char *level, const char *prefix_str,
> >  				const void *buf, size_t len, bool ascii);
> >  extern void print_hex_dump_bytes(const char *prefix_str, int prefix_type,
> >  			const void *buf, size_t len);
> > -#define hex_asc(x)	"0123456789abcdef"[x]
> > +
> > +extern const char hex_asc[];
> 
> I don't see a reason hex_asc should be extern.
> It's only used by hexdump.
> I think it better to remove hex_asc from kernel.h altogether.
> 
> 

The whole point is to start to centralize everybody's private copy of
a hex_asc equivalent.

Harvey


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

* Re: [PATCH 1/4] lib: add ascii hex helper functions
  2008-05-01 21:35   ` Harvey Harrison
@ 2008-05-01 21:44     ` Joe Perches
  2008-05-01 21:58       ` Harvey Harrison
  0 siblings, 1 reply; 7+ messages in thread
From: Joe Perches @ 2008-05-01 21:44 UTC (permalink / raw)
  To: Harvey Harrison; +Cc: Andrew Morton, LKML

On Thu, 2008-05-01 at 14:35 -0700, Harvey Harrison wrote:
> The whole point is to start to centralize everybody's private copy of
> a hex_asc equivalent.

Which should be done via some function,
not via a char array right?


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

* Re: [PATCH 1/4] lib: add ascii hex helper functions
  2008-05-01 21:44     ` Joe Perches
@ 2008-05-01 21:58       ` Harvey Harrison
  0 siblings, 0 replies; 7+ messages in thread
From: Harvey Harrison @ 2008-05-01 21:58 UTC (permalink / raw)
  To: Joe Perches; +Cc: Andrew Morton, LKML

On Thu, 2008-05-01 at 14:44 -0700, Joe Perches wrote:
> On Thu, 2008-05-01 at 14:35 -0700, Harvey Harrison wrote:
> > The whole point is to start to centralize everybody's private copy of
> > a hex_asc equivalent.
> 
> Which should be done via some function,
> not via a char array right?
> 

It's just getting a char from the array, a static inline maybe rather
than the hex_asc_hi/lo macros, but the array would still need to be
extern so the inlines could get at it.  The whole point is avoiding a
function call...which is why everybody has their own static array they
can use directly in the first place.

Harvey


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

end of thread, other threads:[~2008-05-01 21:58 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-05-01 20:51 [PATCH 1/4] lib: add ascii hex helper functions Harvey Harrison
2008-05-01 21:15 ` Andrew Morton
2008-05-01 21:32   ` Harvey Harrison
2008-05-01 21:28 ` Joe Perches
2008-05-01 21:35   ` Harvey Harrison
2008-05-01 21:44     ` Joe Perches
2008-05-01 21:58       ` Harvey Harrison

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