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;
|
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
|
* container_of - cast a member of a structure out to the containing structure
|
||||||
* @ptr: the pointer to the member.
|
* @ptr: the pointer to the member.
|
||||||
|
|
|
@ -53,3 +53,4 @@ obj-y += wchar.o
|
||||||
obj-y += libfile.o
|
obj-y += libfile.o
|
||||||
obj-y += bitmap.o
|
obj-y += bitmap.o
|
||||||
obj-y += gcd.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;
|
return -1;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(parse_area_spec);
|
EXPORT_SYMBOL(parse_area_spec);
|
||||||
|
|
||||||
const char hex_asc[] = "0123456789abcdef";
|
|
||||||
|
|
Loading…
Reference in New Issue