The Linux Kernel Mailing List
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@linux-foundation.org>
To: Harvey Harrison <harvey.harrison@gmail.com>
Cc: torvalds@linux-foundation.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] kernel: add helpers for ascii character conversion
Date: Thu, 1 May 2008 12:43:17 -0700	[thread overview]
Message-ID: <20080501124317.089a0d02.akpm@linux-foundation.org> (raw)
In-Reply-To: <1209669780.24729.151.camel@brick>

On Thu, 01 May 2008 12:23:00 -0700
Harvey Harrison <harvey.harrison@gmail.com> wrote:

> Add helpers for getting an ascii hex char for the high and low
> nibble of a byte.  Also add a small helper to get an integer
> value from a given hex char.
> 
> Included here are a few of the current places that roll their
> own versions being moved to the common helper.

ahh, someone cares ;)

Does this mean that

y:/usr/src/linux-2.6.25> grep -ri '"0123456789abcdef"' . | wc -l
40

will decrease?

> --- a/include/linux/kernel.h
> +++ b/include/linux/kernel.h
> @@ -277,6 +277,21 @@ extern void print_hex_dump(const char *level, const char *prefix_str,
>  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]
> +#define hex_asc_lo(x)	hex_asc(((x) & 0x0f))
> +#define hex_asc_hi(x)	hex_asc(((x) & 0xf0) >> 4)

umm, this might mean that each .c file which uses hex_asc_lo/hi gets
its own copy of "0123456789abcdef".  I believe that gcc/ld are getting
better at handling this, but I haven't checked, and I don't know which
versions get it right nor in which way.  etc.

So it might be better to give the kernel the One True Digitstring in
lib/something.c and export that to modules.

> +static inline u8 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);
> +}

probably should be uninlined.

return-is-not-a-function ;)

>  #define pr_emerg(fmt, arg...) \
>  	printk(KERN_EMERG fmt, ##arg)
> diff --git a/lib/hexdump.c b/lib/hexdump.c
> index 3435465..32b0bd7 100644
> --- a/lib/hexdump.c
> +++ b/lib/hexdump.c
> @@ -93,8 +93,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;


  reply	other threads:[~2008-05-01 19:43 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-05-01 19:23 [PATCH] kernel: add helpers for ascii character conversion Harvey Harrison
2008-05-01 19:43 ` Andrew Morton [this message]
2008-05-01 19:48   ` Harvey Harrison

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080501124317.089a0d02.akpm@linux-foundation.org \
    --to=akpm@linux-foundation.org \
    --cc=harvey.harrison@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox