lib: Add hex2bin and bin2hex implementations
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>
This commit is contained in:
parent
08a50cd306
commit
5dd5884801
|
@ -246,6 +246,10 @@ static inline char *hex_byte_pack_upper(char *buf, u8 byte)
|
|||
return buf;
|
||||
}
|
||||
|
||||
extern int hex_to_bin(char ch);
|
||||
extern int __must_check hex2bin(u8 *dst, const char *src, size_t count);
|
||||
extern char *bin2hex(char *dst, const void *src, size_t count);
|
||||
|
||||
/**
|
||||
* container_of - cast a member of a structure out to the containing structure
|
||||
* @ptr: the pointer to the member.
|
||||
|
|
|
@ -53,3 +53,4 @@ obj-y += wchar.o
|
|||
obj-y += libfile.o
|
||||
obj-y += bitmap.o
|
||||
obj-y += gcd.o
|
||||
obj-y += hexdump.o
|
||||
|
|
|
@ -0,0 +1,74 @@
|
|||
/*
|
||||
* 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);
|
|
@ -114,5 +114,3 @@ int parse_area_spec(const char *str, loff_t *start, loff_t *size)
|
|||
return -1;
|
||||
}
|
||||
EXPORT_SYMBOL(parse_area_spec);
|
||||
|
||||
const char hex_asc[] = "0123456789abcdef";
|
||||
|
|
Loading…
Reference in New Issue