* [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 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 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: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