Taken from the Kernel, put into the same place as in the kernel, although the hexdump.c does not actually contain hexdum functions. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
75 lines
1.6 KiB
C
75 lines
1.6 KiB
C
/*
|
|
* lib/hexdump.c
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation. See README and COPYING for
|
|
* more details.
|
|
*/
|
|
|
|
#include <common.h>
|
|
#include <linux/kernel.h>
|
|
#include <linux/ctype.h>
|
|
|
|
const char hex_asc[] = "0123456789abcdef";
|
|
EXPORT_SYMBOL(hex_asc);
|
|
const char hex_asc_upper[] = "0123456789ABCDEF";
|
|
EXPORT_SYMBOL(hex_asc_upper);
|
|
|
|
/**
|
|
* hex_to_bin - convert a hex digit to its real value
|
|
* @ch: ascii character represents hex digit
|
|
*
|
|
* hex_to_bin() converts one hex digit to its actual value or -1 in case of bad
|
|
* input.
|
|
*/
|
|
int hex_to_bin(char ch)
|
|
{
|
|
if ((ch >= '0') && (ch <= '9'))
|
|
return ch - '0';
|
|
ch = tolower(ch);
|
|
if ((ch >= 'a') && (ch <= 'f'))
|
|
return ch - 'a' + 10;
|
|
return -1;
|
|
}
|
|
EXPORT_SYMBOL(hex_to_bin);
|
|
|
|
/**
|
|
* hex2bin - convert an ascii hexadecimal string to its binary representation
|
|
* @dst: binary result
|
|
* @src: ascii hexadecimal string
|
|
* @count: result length
|
|
*
|
|
* Return 0 on success, -1 in case of bad input.
|
|
*/
|
|
int hex2bin(u8 *dst, const char *src, size_t count)
|
|
{
|
|
while (count--) {
|
|
int hi = hex_to_bin(*src++);
|
|
int lo = hex_to_bin(*src++);
|
|
|
|
if ((hi < 0) || (lo < 0))
|
|
return -1;
|
|
|
|
*dst++ = (hi << 4) | lo;
|
|
}
|
|
return 0;
|
|
}
|
|
EXPORT_SYMBOL(hex2bin);
|
|
|
|
/**
|
|
* bin2hex - convert binary data to an ascii hexadecimal string
|
|
* @dst: ascii hexadecimal result
|
|
* @src: binary data
|
|
* @count: binary data length
|
|
*/
|
|
char *bin2hex(char *dst, const void *src, size_t count)
|
|
{
|
|
const unsigned char *_src = src;
|
|
|
|
while (count--)
|
|
dst = hex_byte_pack(dst, *_src++);
|
|
return dst;
|
|
}
|
|
EXPORT_SYMBOL(bin2hex);
|