lib: add ascii hex helper functions
Subsystems (2)
PATCH 1/9 lib: add ascii hex helper functions
Everyone rolls their own version around the tree, centralize in lib/hexdump.c
Signed-off-by Harvey Harrison <[email protected]>
--- include/linux/kernel.h | 6 +++++- lib/hexdump.c | 25 +++++++++++++++++++++++-- 2 files changed, 28 insertions(+), 3 deletions(-)
include/linux/kernel.h +5 -1
@@ -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)
lib/hexdump.c +23 -2
@@ -12,6 +12,27 @@#include <linux/kernel.h> #include <linux/module.h> +const char hex_asc[] ="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 ;
Signature · 1 line
1.5.5.1.305.g7c84
Signed-off-by Harvey Harrison <[email protected]>
---
Missed one spot in 1/9 that breaks the build. I've checked the rest of the tree and this was the only place that slipped through.
drivers/pnp/support.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-)
drivers/pnp/support.c +4 -4
@@ -45,10 +45,10 @@ void pnp_eisa_id_to_string(u32 id, char *str) str[0 ] ='A' + ((id >>26 ) &0x3f ) -1 ; str[1 ] ='A' + ((id >>21 ) &0x1f ) -1 ; str[2 ] ='A' + ((id >>16 ) &0x1f ) -1 ; - str[3 ] =hex_asc ((id >>12 ) &0xf ); - str[4 ] =hex_asc ((id >>8 ) &0xf ); - str[5 ] =hex_asc ((id >>4 ) &0xf ); - str[6 ] =hex_asc ((id >>0 ) &0xf ); + str[3 ] =hex_asc_hi (id >>8 ); + str[4 ] =hex_asc_lo (id >>8 ); + str[5 ] =hex_asc_hi (id); + str[6 ] =hex_asc_lo (id); str[7 ] ='\0' ; }
Signature · 1 line
1.5.5.1.350.gbbbf