public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/10] Introduce common hex_to_bin() helper
@ 2010-04-30  9:33 Andy Shevchenko
  2010-04-30  9:34 ` [PATCH 01/10] lib: introduce common method to convert hex digits Andy Shevchenko
                   ` (9 more replies)
  0 siblings, 10 replies; 16+ messages in thread
From: Andy Shevchenko @ 2010-04-30  9:33 UTC (permalink / raw)
  To: linux-kernel; +Cc: Andy Shevchenko

Hello.

Here is set of patches related to hex_to_bin() custom implementations. Many of
them are changed to newly introduced common method.

The idea published early by Harvey Harrison [1], but was given to me by
Alexander Shishkin.

[1] http://lkml.indiana.edu/hypermail/linux/kernel/0805.0/0323.html

This version is just rebase against today's linux kernel.

Andy Shevchenko (10):
  lib: introduce common method to convert hex digits
  drivers: isdn: use new hex_to_bin() method
  usb: atm: speedtch: use new hex_to_bin() method
  drivers: net: use new hex_to_bin() method
  drivers: net: use new hex_to_bin() method
  sysctl: don't use own implementation of hex_to_bin()
  staging: rt2860: use new hex_to_bin() method
  fs: ldm: don't use own implementation of hex_to_bin()
  drivers: wireless: use new hex_to_bin() method
  drivers: acpi: don't use own implementation of hex_to_bin()

 drivers/acpi/bus.c                        |    9 +------
 drivers/isdn/gigaset/capi.c               |   13 +----------
 drivers/net/cxgb3/t3_hw.c                 |   16 +++----------
 drivers/net/sb1250-mac.c                  |   32 +---------------------------
 drivers/net/wireless/airo.c               |   15 +++----------
 drivers/staging/rt2860/common/rtmp_init.c |   15 +-----------
 drivers/staging/rt2860/rtmp.h             |    2 -
 drivers/usb/atm/speedtch.c                |    5 +--
 fs/partitions/ldm.c                       |   18 ++++++++--------
 include/linux/kernel.h                    |    2 +
 kernel/sysctl_binary.c                    |    9 ++-----
 lib/hexdump.c                             |   19 +++++++++++++++++
 12 files changed, 50 insertions(+), 105 deletions(-)


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [PATCH 01/10] lib: introduce common method to convert hex digits
  2010-04-30  9:33 [PATCH 00/10] Introduce common hex_to_bin() helper Andy Shevchenko
@ 2010-04-30  9:34 ` Andy Shevchenko
  2010-04-30 19:07   ` Andrew Morton
  2010-04-30  9:34 ` [PATCH 02/10] drivers: isdn: use new hex_to_bin() method Andy Shevchenko
                   ` (8 subsequent siblings)
  9 siblings, 1 reply; 16+ messages in thread
From: Andy Shevchenko @ 2010-04-30  9:34 UTC (permalink / raw)
  To: linux-kernel; +Cc: Andy Shevchenko, Andrew Morton

hex_to_bin() is a little method which converts hex digit to its actual value.
There are plenty of places where such functionality is needed.

Signed-off-by: Andy Shevchenko <ext-andriy.shevchenko@nokia.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
---
 include/linux/kernel.h |    2 ++
 lib/hexdump.c          |   19 +++++++++++++++++++
 2 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/include/linux/kernel.h b/include/linux/kernel.h
index 9365227..2077cd1 100644
--- a/include/linux/kernel.h
+++ b/include/linux/kernel.h
@@ -372,6 +372,8 @@ static inline char *pack_hex_byte(char *buf, u8 byte)
 	return buf;
 }
 
+extern int hex_to_bin(char ch);
+
 #ifndef pr_fmt
 #define pr_fmt(fmt) fmt
 #endif
diff --git a/lib/hexdump.c b/lib/hexdump.c
index 39af256..d79b166 100644
--- a/lib/hexdump.c
+++ b/lib/hexdump.c
@@ -16,6 +16,25 @@ const char hex_asc[] = "0123456789abcdef";
 EXPORT_SYMBOL(hex_asc);
 
 /**
+ * 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 >= 'a') && (ch <= 'f'))
+		return ch - 'a' + 10;
+	if ((ch >= '0') && (ch <= '9'))
+		return ch - '0';
+	if ((ch >= 'A') && (ch <= 'F'))
+		return ch - 'A' + 10;
+	return -1;
+}
+EXPORT_SYMBOL(hex_to_bin);
+
+/**
  * hex_dump_to_buffer - convert a blob of data to "hex ASCII" in memory
  * @buf: data blob to dump
  * @len: number of bytes in the @buf
-- 
1.6.3.3


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 02/10] drivers: isdn: use new hex_to_bin() method
  2010-04-30  9:33 [PATCH 00/10] Introduce common hex_to_bin() helper Andy Shevchenko
  2010-04-30  9:34 ` [PATCH 01/10] lib: introduce common method to convert hex digits Andy Shevchenko
@ 2010-04-30  9:34 ` Andy Shevchenko
  2010-04-30  9:34 ` [PATCH 03/10] usb: atm: speedtch: " Andy Shevchenko
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 16+ messages in thread
From: Andy Shevchenko @ 2010-04-30  9:34 UTC (permalink / raw)
  To: linux-kernel; +Cc: Andy Shevchenko, Andrew Morton

Get rid of own implementation of hex_to_bin().

Signed-off-by: Andy Shevchenko <ext-andriy.shevchenko@nokia.com>
Acked-by: Tilman Schmidt <tilman@imap.cc>
Cc: Andrew Morton <akpm@linux-foundation.org>
---
 drivers/isdn/gigaset/capi.c |   13 +------------
 1 files changed, 1 insertions(+), 12 deletions(-)

diff --git a/drivers/isdn/gigaset/capi.c b/drivers/isdn/gigaset/capi.c
index 964a55f..ac4cfee 100644
--- a/drivers/isdn/gigaset/capi.c
+++ b/drivers/isdn/gigaset/capi.c
@@ -170,17 +170,6 @@ static inline void ignore_cstruct_param(struct cardstate *cs, _cstruct param,
 }
 
 /*
- * convert hex to binary
- */
-static inline u8 hex2bin(char c)
-{
-	int result = c & 0x0f;
-	if (c & 0x40)
-		result += 9;
-	return result;
-}
-
-/*
  * convert an IE from Gigaset hex string to ETSI binary representation
  * including length byte
  * return value: result length, -1 on error
@@ -191,7 +180,7 @@ static int encode_ie(char *in, u8 *out, int maxlen)
 	while (*in) {
 		if (!isxdigit(in[0]) || !isxdigit(in[1]) || l >= maxlen)
 			return -1;
-		out[++l] = (hex2bin(in[0]) << 4) + hex2bin(in[1]);
+		out[++l] = (hex_to_bin(in[0]) << 4) + hex_to_bin(in[1]);
 		in += 2;
 	}
 	out[0] = l;
-- 
1.6.3.3


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 03/10] usb: atm: speedtch: use new hex_to_bin() method
  2010-04-30  9:33 [PATCH 00/10] Introduce common hex_to_bin() helper Andy Shevchenko
  2010-04-30  9:34 ` [PATCH 01/10] lib: introduce common method to convert hex digits Andy Shevchenko
  2010-04-30  9:34 ` [PATCH 02/10] drivers: isdn: use new hex_to_bin() method Andy Shevchenko
@ 2010-04-30  9:34 ` Andy Shevchenko
  2010-04-30  9:34 ` [PATCH 04/10] drivers: net: " Andy Shevchenko
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 16+ messages in thread
From: Andy Shevchenko @ 2010-04-30  9:34 UTC (permalink / raw)
  To: linux-kernel; +Cc: Andy Shevchenko, Duncan Sands, Andrew Morton

Instead of using own implementation which potentialy has bugs involve
hex_to_bin() function. It requires to have hex_to_bin() implementation
introduced by starter patch in series.

Signed-off-by: Andy Shevchenko <ext-andriy.shevchenko@nokia.com>
Cc: Duncan Sands <duncan.sands@free.fr>
Cc: Andrew Morton <akpm@linux-foundation.org>
---
 drivers/usb/atm/speedtch.c |    5 ++---
 1 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/usb/atm/speedtch.c b/drivers/usb/atm/speedtch.c
index 1e9ba4b..1335456 100644
--- a/drivers/usb/atm/speedtch.c
+++ b/drivers/usb/atm/speedtch.c
@@ -127,8 +127,6 @@ MODULE_PARM_DESC(ModemOption, "default: 0x10,0x00,0x00,0x00,0x20");
 #define ENDPOINT_ISOC_DATA	0x07
 #define ENDPOINT_FIRMWARE	0x05
 
-#define hex2int(c) ( (c >= '0') && (c <= '9') ? (c - '0') : ((c & 0xf) + 9) )
-
 struct speedtch_params {
 	unsigned int altsetting;
 	unsigned int BMaxDSL;
@@ -669,7 +667,8 @@ static int speedtch_atm_start(struct usbatm_data *usbatm, struct atm_dev *atm_de
 	memset(atm_dev->esi, 0, sizeof(atm_dev->esi));
 	if (usb_string(usb_dev, usb_dev->descriptor.iSerialNumber, mac_str, sizeof(mac_str)) == 12) {
 		for (i = 0; i < 6; i++)
-			atm_dev->esi[i] = (hex2int(mac_str[i * 2]) * 16) + (hex2int(mac_str[i * 2 + 1]));
+			atm_dev->esi[i] = (hex_to_bin(mac_str[i * 2]) << 4) +
+				hex_to_bin(mac_str[i * 2 + 1]);
 	}
 
 	/* Start modem synchronisation */
-- 
1.6.3.3


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 04/10] drivers: net: use new hex_to_bin() method
  2010-04-30  9:33 [PATCH 00/10] Introduce common hex_to_bin() helper Andy Shevchenko
                   ` (2 preceding siblings ...)
  2010-04-30  9:34 ` [PATCH 03/10] usb: atm: speedtch: " Andy Shevchenko
@ 2010-04-30  9:34 ` Andy Shevchenko
  2010-04-30  9:34 ` [PATCH 05/10] " Andy Shevchenko
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 16+ messages in thread
From: Andy Shevchenko @ 2010-04-30  9:34 UTC (permalink / raw)
  To: linux-kernel; +Cc: Andy Shevchenko, Greg Kroah-Hartman, Andrew Morton

Instead of using own implementation involve hex_to_bin() function. It requires
to have hex_to_bin() introduced by starter patch in series.

Signed-off-by: Andy Shevchenko <ext-andriy.shevchenko@nokia.com>
Cc: Greg Kroah-Hartman <gregkh@suse.de>
Cc: Andrew Morton <akpm@linux-foundation.org>
---
 drivers/net/sb1250-mac.c |   32 ++------------------------------
 1 files changed, 2 insertions(+), 30 deletions(-)

diff --git a/drivers/net/sb1250-mac.c b/drivers/net/sb1250-mac.c
index 9944e5d..34f8753 100644
--- a/drivers/net/sb1250-mac.c
+++ b/drivers/net/sb1250-mac.c
@@ -2184,34 +2184,6 @@ static void sbmac_setmulti(struct sbmac_softc *sc)
 
 #if defined(SBMAC_ETH0_HWADDR) || defined(SBMAC_ETH1_HWADDR) || defined(SBMAC_ETH2_HWADDR) || defined(SBMAC_ETH3_HWADDR)
 /**********************************************************************
- *  SBMAC_PARSE_XDIGIT(str)
- *
- *  Parse a hex digit, returning its value
- *
- *  Input parameters:
- *  	   str - character
- *
- *  Return value:
- *  	   hex value, or -1 if invalid
- ********************************************************************* */
-
-static int sbmac_parse_xdigit(char str)
-{
-	int digit;
-
-	if ((str >= '0') && (str <= '9'))
-		digit = str - '0';
-	else if ((str >= 'a') && (str <= 'f'))
-		digit = str - 'a' + 10;
-	else if ((str >= 'A') && (str <= 'F'))
-		digit = str - 'A' + 10;
-	else
-		return -1;
-
-	return digit;
-}
-
-/**********************************************************************
  *  SBMAC_PARSE_HWADDR(str,hwaddr)
  *
  *  Convert a string in the form xx:xx:xx:xx:xx:xx into a 6-byte
@@ -2231,7 +2203,7 @@ static int sbmac_parse_hwaddr(char *str, unsigned char *hwaddr)
 	int idx = 6;
 
 	while (*str && (idx > 0)) {
-		digit1 = sbmac_parse_xdigit(*str);
+		digit1 = hex_to_bin(*str);
 		if (digit1 < 0)
 			return -1;
 		str++;
@@ -2243,7 +2215,7 @@ static int sbmac_parse_hwaddr(char *str, unsigned char *hwaddr)
 			digit1 = 0;
 		}
 		else {
-			digit2 = sbmac_parse_xdigit(*str);
+			digit2 = hex_to_bin(*str);
 			if (digit2 < 0)
 				return -1;
 			str++;
-- 
1.6.3.3


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 05/10] drivers: net: use new hex_to_bin() method
  2010-04-30  9:33 [PATCH 00/10] Introduce common hex_to_bin() helper Andy Shevchenko
                   ` (3 preceding siblings ...)
  2010-04-30  9:34 ` [PATCH 04/10] drivers: net: " Andy Shevchenko
@ 2010-04-30  9:34 ` Andy Shevchenko
  2010-05-04  0:14   ` Divy Le Ray
  2010-04-30  9:34 ` [PATCH 06/10] sysctl: don't use own implementation of hex_to_bin() Andy Shevchenko
                   ` (4 subsequent siblings)
  9 siblings, 1 reply; 16+ messages in thread
From: Andy Shevchenko @ 2010-04-30  9:34 UTC (permalink / raw)
  To: linux-kernel; +Cc: Andy Shevchenko, Divy Le Ray, Andrew Morton

Get rid of own implementation of hex_to_bin(). It requires to have hex_to_bin()
introduced by starter patch in series.

Signed-off-by: Andy Shevchenko <ext-andriy.shevchenko@nokia.com>
Cc: Divy Le Ray <divy@chelsio.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
---
 drivers/net/cxgb3/t3_hw.c |   16 ++++------------
 1 files changed, 4 insertions(+), 12 deletions(-)

diff --git a/drivers/net/cxgb3/t3_hw.c b/drivers/net/cxgb3/t3_hw.c
index 95a8ba0..427c451 100644
--- a/drivers/net/cxgb3/t3_hw.c
+++ b/drivers/net/cxgb3/t3_hw.c
@@ -679,14 +679,6 @@ int t3_seeprom_wp(struct adapter *adapter, int enable)
 	return t3_seeprom_write(adapter, EEPROM_STAT_ADDR, enable ? 0xc : 0);
 }
 
-/*
- * Convert a character holding a hex digit to a number.
- */
-static unsigned int hex2int(unsigned char c)
-{
-	return isdigit(c) ? c - '0' : toupper(c) - 'A' + 10;
-}
-
 /**
  *	get_vpd_params - read VPD parameters from VPD EEPROM
  *	@adapter: adapter to read
@@ -727,15 +719,15 @@ static int get_vpd_params(struct adapter *adapter, struct vpd_params *p)
 		p->port_type[0] = uses_xaui(adapter) ? 1 : 2;
 		p->port_type[1] = uses_xaui(adapter) ? 6 : 2;
 	} else {
-		p->port_type[0] = hex2int(vpd.port0_data[0]);
-		p->port_type[1] = hex2int(vpd.port1_data[0]);
+		p->port_type[0] = hex_to_bin(vpd.port0_data[0]);
+		p->port_type[1] = hex_to_bin(vpd.port1_data[0]);
 		p->xauicfg[0] = simple_strtoul(vpd.xaui0cfg_data, NULL, 16);
 		p->xauicfg[1] = simple_strtoul(vpd.xaui1cfg_data, NULL, 16);
 	}
 
 	for (i = 0; i < 6; i++)
-		p->eth_base[i] = hex2int(vpd.na_data[2 * i]) * 16 +
-				 hex2int(vpd.na_data[2 * i + 1]);
+		p->eth_base[i] = hex_to_bin(vpd.na_data[2 * i]) * 16 +
+				 hex_to_bin(vpd.na_data[2 * i + 1]);
 	return 0;
 }
 
-- 
1.6.3.3


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 06/10] sysctl: don't use own implementation of hex_to_bin()
  2010-04-30  9:33 [PATCH 00/10] Introduce common hex_to_bin() helper Andy Shevchenko
                   ` (4 preceding siblings ...)
  2010-04-30  9:34 ` [PATCH 05/10] " Andy Shevchenko
@ 2010-04-30  9:34 ` Andy Shevchenko
  2010-04-30  9:34 ` [PATCH 07/10] staging: rt2860: use new hex_to_bin() method Andy Shevchenko
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 16+ messages in thread
From: Andy Shevchenko @ 2010-04-30  9:34 UTC (permalink / raw)
  To: linux-kernel; +Cc: Andy Shevchenko, Eric W. Biederman, Andrew Morton

Get rid of own implementation of hex_to_bin().

Signed-off-by: Andy Shevchenko <ext-andriy.shevchenko@nokia.com>
Cc: Eric W. Biederman <ebiederm@xmission.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
---
 kernel/sysctl_binary.c |    9 +++------
 1 files changed, 3 insertions(+), 6 deletions(-)

diff --git a/kernel/sysctl_binary.c b/kernel/sysctl_binary.c
index 5903057..f4789ed 100644
--- a/kernel/sysctl_binary.c
+++ b/kernel/sysctl_binary.c
@@ -13,6 +13,7 @@
 #include <linux/file.h>
 #include <linux/ctype.h>
 #include <linux/netdevice.h>
+#include <linux/kernel.h>
 #include <linux/slab.h>
 
 #ifdef CONFIG_SYSCTL_SYSCALL
@@ -1125,11 +1126,6 @@ out:
 	return result;
 }
 
-static unsigned hex_value(int ch)
-{
-	return isdigit(ch) ? ch - '0' : ((ch | 0x20) - 'a') + 10;
-}
-
 static ssize_t bin_uuid(struct file *file,
 	void __user *oldval, size_t oldlen, void __user *newval, size_t newlen)
 {
@@ -1157,7 +1153,8 @@ static ssize_t bin_uuid(struct file *file,
 			if (!isxdigit(str[0]) || !isxdigit(str[1]))
 				goto out;
 
-			uuid[i] = (hex_value(str[0]) << 4) | hex_value(str[1]);
+			uuid[i] = (hex_to_bin(str[0]) << 4) |
+					hex_to_bin(str[1]);
 			str += 2;
 			if (*str == '-')
 				str++;
-- 
1.6.3.3


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 07/10] staging: rt2860: use new hex_to_bin() method
  2010-04-30  9:33 [PATCH 00/10] Introduce common hex_to_bin() helper Andy Shevchenko
                   ` (5 preceding siblings ...)
  2010-04-30  9:34 ` [PATCH 06/10] sysctl: don't use own implementation of hex_to_bin() Andy Shevchenko
@ 2010-04-30  9:34 ` Andy Shevchenko
  2010-04-30  9:34 ` [PATCH 08/10] fs: ldm: don't use own implementation of hex_to_bin() Andy Shevchenko
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 16+ messages in thread
From: Andy Shevchenko @ 2010-04-30  9:34 UTC (permalink / raw)
  To: linux-kernel; +Cc: Andy Shevchenko, Greg Kroah-Hartman, Andrew Morton

Instead of using own implementation involve hex_to_bin() function.

Signed-off-by: Andy Shevchenko <ext-andriy.shevchenko@nokia.com>
Cc: Greg Kroah-Hartman <gregkh@suse.de>
Cc: Andrew Morton <akpm@linux-foundation.org>
---
 drivers/staging/rt2860/common/rtmp_init.c |   15 ++-------------
 drivers/staging/rt2860/rtmp.h             |    2 --
 2 files changed, 2 insertions(+), 15 deletions(-)

diff --git a/drivers/staging/rt2860/common/rtmp_init.c b/drivers/staging/rt2860/common/rtmp_init.c
index 21a95ff..a090385 100644
--- a/drivers/staging/rt2860/common/rtmp_init.c
+++ b/drivers/staging/rt2860/common/rtmp_init.c
@@ -2810,17 +2810,6 @@ void UserCfgInit(struct rt_rtmp_adapter *pAd)
 }
 
 /* IRQL = PASSIVE_LEVEL */
-u8 BtoH(char ch)
-{
-	if (ch >= '0' && ch <= '9')
-		return (ch - '0');	/* Handle numerals */
-	if (ch >= 'A' && ch <= 'F')
-		return (ch - 'A' + 0xA);	/* Handle capitol hex digits */
-	if (ch >= 'a' && ch <= 'f')
-		return (ch - 'a' + 0xA);	/* Handle small hex digits */
-	return (255);
-}
-
 /* */
 /*  FUNCTION: AtoH(char *, u8 *, int) */
 /* */
@@ -2847,8 +2836,8 @@ void AtoH(char *src, u8 *dest, int destlen)
 	destTemp = (u8 *)dest;
 
 	while (destlen--) {
-		*destTemp = BtoH(*srcptr++) << 4;	/* Put 1st ascii byte in upper nibble. */
-		*destTemp += BtoH(*srcptr++);	/* Add 2nd ascii byte to above. */
+		*destTemp = hex_to_bin(*srcptr++) << 4;	/* Put 1st ascii byte in upper nibble. */
+		*destTemp += hex_to_bin(*srcptr++);	/* Add 2nd ascii byte to above. */
 		destTemp++;
 	}
 }
diff --git a/drivers/staging/rt2860/rtmp.h b/drivers/staging/rt2860/rtmp.h
index 4401a55..73bf325 100644
--- a/drivers/staging/rt2860/rtmp.h
+++ b/drivers/staging/rt2860/rtmp.h
@@ -2367,8 +2367,6 @@ void RTMPMoveMemory(void *pDest, void *pSrc, unsigned long Length);
 
 void AtoH(char *src, u8 *dest, int destlen);
 
-u8 BtoH(char ch);
-
 void RTMPPatchMacBbpBug(struct rt_rtmp_adapter *pAd);
 
 void RTMPInitTimer(struct rt_rtmp_adapter *pAd,
-- 
1.6.3.3


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 08/10] fs: ldm: don't use own implementation of hex_to_bin()
  2010-04-30  9:33 [PATCH 00/10] Introduce common hex_to_bin() helper Andy Shevchenko
                   ` (6 preceding siblings ...)
  2010-04-30  9:34 ` [PATCH 07/10] staging: rt2860: use new hex_to_bin() method Andy Shevchenko
@ 2010-04-30  9:34 ` Andy Shevchenko
  2010-04-30  9:34 ` [PATCH 09/10] drivers: wireless: use new hex_to_bin() method Andy Shevchenko
  2010-04-30  9:34 ` [PATCH 10/10] drivers: acpi: don't use own implementation of hex_to_bin() Andy Shevchenko
  9 siblings, 0 replies; 16+ messages in thread
From: Andy Shevchenko @ 2010-04-30  9:34 UTC (permalink / raw)
  To: linux-kernel; +Cc: Andy Shevchenko, Richard Russon (FlatCap), Andrew Morton

Get rid of own implementation of hex_to_bin().

Signed-off-by: Andy Shevchenko <ext-andriy.shevchenko@nokia.com>
Cc: "Richard Russon (FlatCap)" <ldm@flatcap.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
---
 fs/partitions/ldm.c |   18 +++++++++---------
 1 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/fs/partitions/ldm.c b/fs/partitions/ldm.c
index 8652fb9..cb445fb 100644
--- a/fs/partitions/ldm.c
+++ b/fs/partitions/ldm.c
@@ -26,6 +26,7 @@
 #include <linux/slab.h>
 #include <linux/pagemap.h>
 #include <linux/stringify.h>
+#include <linux/kernel.h>
 #include "ldm.h"
 #include "check.h"
 #include "msdos.h"
@@ -77,17 +78,16 @@ static int ldm_parse_hexbyte (const u8 *src)
 	int h;
 
 	/* high part */
-	if      ((x = src[0] - '0') <= '9'-'0') h = x;
-	else if ((x = src[0] - 'a') <= 'f'-'a') h = x+10;
-	else if ((x = src[0] - 'A') <= 'F'-'A') h = x+10;
-	else return -1;
-	h <<= 4;
+	x = h = hex_to_bin(src[0]);
+	if (h < 0)
+		return -1;
 
 	/* low part */
-	if ((x = src[1] - '0') <= '9'-'0') return h | x;
-	if ((x = src[1] - 'a') <= 'f'-'a') return h | (x+10);
-	if ((x = src[1] - 'A') <= 'F'-'A') return h | (x+10);
-	return -1;
+	h = hex_to_bin(src[1]);
+	if (h < 0)
+		return -1;
+
+	return (x << 4) + h;
 }
 
 /**
-- 
1.6.3.3


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 09/10] drivers: wireless: use new hex_to_bin() method
  2010-04-30  9:33 [PATCH 00/10] Introduce common hex_to_bin() helper Andy Shevchenko
                   ` (7 preceding siblings ...)
  2010-04-30  9:34 ` [PATCH 08/10] fs: ldm: don't use own implementation of hex_to_bin() Andy Shevchenko
@ 2010-04-30  9:34 ` Andy Shevchenko
  2010-04-30 18:14   ` John W. Linville
  2010-04-30  9:34 ` [PATCH 10/10] drivers: acpi: don't use own implementation of hex_to_bin() Andy Shevchenko
  9 siblings, 1 reply; 16+ messages in thread
From: Andy Shevchenko @ 2010-04-30  9:34 UTC (permalink / raw)
  To: linux-kernel; +Cc: Andy Shevchenko, John W. Linville, Andrew Morton

Instead of using own implementation involve hex_to_bin() function.

Signed-off-by: Andy Shevchenko <ext-andriy.shevchenko@nokia.com>
Cc: John W. Linville <linville@tuxdriver.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
---
 drivers/net/wireless/airo.c |   15 ++++-----------
 1 files changed, 4 insertions(+), 11 deletions(-)

diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c
index dc5018a..1b9d408 100644
--- a/drivers/net/wireless/airo.c
+++ b/drivers/net/wireless/airo.c
@@ -5151,13 +5151,6 @@ static void proc_SSID_on_close(struct inode *inode, struct file *file)
 	enable_MAC(ai, 1);
 }
 
-static inline u8 hexVal(char c) {
-	if (c>='0' && c<='9') return c -= '0';
-	if (c>='a' && c<='f') return c -= 'a'-10;
-	if (c>='A' && c<='F') return c -= 'A'-10;
-	return 0;
-}
-
 static void proc_APList_on_close( struct inode *inode, struct file *file ) {
 	struct proc_data *data = (struct proc_data *)file->private_data;
 	struct proc_dir_entry *dp = PDE(inode);
@@ -5177,11 +5170,11 @@ static void proc_APList_on_close( struct inode *inode, struct file *file ) {
 			switch(j%3) {
 			case 0:
 				APList_rid.ap[i][j/3]=
-					hexVal(data->wbuffer[j+i*6*3])<<4;
+					hex_to_bin(data->wbuffer[j+i*6*3])<<4;
 				break;
 			case 1:
 				APList_rid.ap[i][j/3]|=
-					hexVal(data->wbuffer[j+i*6*3]);
+					hex_to_bin(data->wbuffer[j+i*6*3]);
 				break;
 			}
 		}
@@ -5329,10 +5322,10 @@ static void proc_wepkey_on_close( struct inode *inode, struct file *file ) {
 	for( i = 0; i < 16*3 && data->wbuffer[i+j]; i++ ) {
 		switch(i%3) {
 		case 0:
-			key[i/3] = hexVal(data->wbuffer[i+j])<<4;
+			key[i/3] = hex_to_bin(data->wbuffer[i+j])<<4;
 			break;
 		case 1:
-			key[i/3] |= hexVal(data->wbuffer[i+j]);
+			key[i/3] |= hex_to_bin(data->wbuffer[i+j]);
 			break;
 		}
 	}
-- 
1.6.3.3


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 10/10] drivers: acpi: don't use own implementation of hex_to_bin()
  2010-04-30  9:33 [PATCH 00/10] Introduce common hex_to_bin() helper Andy Shevchenko
                   ` (8 preceding siblings ...)
  2010-04-30  9:34 ` [PATCH 09/10] drivers: wireless: use new hex_to_bin() method Andy Shevchenko
@ 2010-04-30  9:34 ` Andy Shevchenko
  9 siblings, 0 replies; 16+ messages in thread
From: Andy Shevchenko @ 2010-04-30  9:34 UTC (permalink / raw)
  To: linux-kernel; +Cc: Andy Shevchenko, Len Brown, Andrew Morton

Get rid of own implementation of hex_to_bin(). It requires to have hex_to_bin()
introduced by starter patch in the series.

Signed-off-by: Andy Shevchenko <ext-andriy.shevchenko@nokia.com>
Cc: Len Brown <lenb@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
---
 drivers/acpi/bus.c |    9 ++-------
 1 files changed, 2 insertions(+), 7 deletions(-)

diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
index 37132dc..f36ee6f 100644
--- a/drivers/acpi/bus.c
+++ b/drivers/acpi/bus.c
@@ -363,11 +363,6 @@ static void acpi_print_osc_error(acpi_handle handle,
 	printk("\n");
 }
 
-static u8 hex_val(unsigned char c)
-{
-	return isdigit(c) ? c - '0' : toupper(c) - 'A' + 10;
-}
-
 static acpi_status acpi_str_to_uuid(char *str, u8 *uuid)
 {
 	int i;
@@ -384,8 +379,8 @@ static acpi_status acpi_str_to_uuid(char *str, u8 *uuid)
 			return AE_BAD_PARAMETER;
 	}
 	for (i = 0; i < 16; i++) {
-		uuid[i] = hex_val(str[opc_map_to_uuid[i]]) << 4;
-		uuid[i] |= hex_val(str[opc_map_to_uuid[i] + 1]);
+		uuid[i] = hex_to_bin(str[opc_map_to_uuid[i]]) << 4;
+		uuid[i] |= hex_to_bin(str[opc_map_to_uuid[i] + 1]);
 	}
 	return AE_OK;
 }
-- 
1.6.3.3


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH 09/10] drivers: wireless: use new hex_to_bin() method
  2010-04-30  9:34 ` [PATCH 09/10] drivers: wireless: use new hex_to_bin() method Andy Shevchenko
@ 2010-04-30 18:14   ` John W. Linville
  0 siblings, 0 replies; 16+ messages in thread
From: John W. Linville @ 2010-04-30 18:14 UTC (permalink / raw)
  To: Andy Shevchenko; +Cc: linux-kernel, Andrew Morton

On Fri, Apr 30, 2010 at 12:34:08PM +0300, Andy Shevchenko wrote:
> Instead of using own implementation involve hex_to_bin() function.
> 
> Signed-off-by: Andy Shevchenko <ext-andriy.shevchenko@nokia.com>
> Cc: John W. Linville <linville@tuxdriver.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>

ACK

-- 
John W. Linville		Someday the world will need a hero, and you
linville@tuxdriver.com			might be all we have.  Be ready.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 01/10] lib: introduce common method to convert hex digits
  2010-04-30  9:34 ` [PATCH 01/10] lib: introduce common method to convert hex digits Andy Shevchenko
@ 2010-04-30 19:07   ` Andrew Morton
  2010-05-01  2:55     ` Joe Perches
  2010-05-02 18:12     ` Andy Shevchenko
  0 siblings, 2 replies; 16+ messages in thread
From: Andrew Morton @ 2010-04-30 19:07 UTC (permalink / raw)
  To: Andy Shevchenko; +Cc: linux-kernel

On Fri, 30 Apr 2010 12:34:00 +0300
Andy Shevchenko <ext-andriy.shevchenko@nokia.com> wrote:

>  /**
> + * 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 >= 'a') && (ch <= 'f'))
> +		return ch - 'a' + 10;
> +	if ((ch >= '0') && (ch <= '9'))
> +		return ch - '0';
> +	if ((ch >= 'A') && (ch <= 'F'))
> +		return ch - 'A' + 10;
> +	return -1;
> +}
> +EXPORT_SYMBOL(hex_to_bin);

I had to fiddle with it:

- use tolower(), saving 3 bytes!

- test the more common case first - it's quicker.

diff -puN lib/hexdump.c~lib-introduce-common-method-to-convert-hex-digits-fix lib/hexdump.c
--- a/lib/hexdump.c~lib-introduce-common-method-to-convert-hex-digits-fix
+++ a/lib/hexdump.c
@@ -24,12 +24,11 @@ EXPORT_SYMBOL(hex_asc);
  */
 int hex_to_bin(char ch)
 {
-	if ((ch >= 'a') && (ch <= 'f'))
-		return ch - 'a' + 10;
+	ch = tolower(ch);
 	if ((ch >= '0') && (ch <= '9'))
 		return ch - '0';
-	if ((ch >= 'A') && (ch <= 'F'))
-		return ch - 'A' + 10;
+	if ((ch >= 'a') && (ch <= 'f'))
+		return ch - 'a' + 10;
 	return -1;
 }
 EXPORT_SYMBOL(hex_to_bin);
_


Yielding

int hex_to_bin(char ch)
{
	ch = tolower(ch);
	if ((ch >= '0') && (ch <= '9'))
		return ch - '0';
	if ((ch >= 'a') && (ch <= 'f'))
		return ch - 'a' + 10;
	return -1;
}


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 01/10] lib: introduce common method to convert hex digits
  2010-04-30 19:07   ` Andrew Morton
@ 2010-05-01  2:55     ` Joe Perches
  2010-05-02 18:12     ` Andy Shevchenko
  1 sibling, 0 replies; 16+ messages in thread
From: Joe Perches @ 2010-05-01  2:55 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Andy Shevchenko, linux-kernel

On Fri, 2010-04-30 at 12:07 -0700, Andrew Morton wrote:
> I had to fiddle with it:
> - use tolower(), saving 3 bytes!

tolower could be done after the 0-9 case as well

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;
}



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 01/10] lib: introduce common method to convert hex digits
  2010-04-30 19:07   ` Andrew Morton
  2010-05-01  2:55     ` Joe Perches
@ 2010-05-02 18:12     ` Andy Shevchenko
  1 sibling, 0 replies; 16+ messages in thread
From: Andy Shevchenko @ 2010-05-02 18:12 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-kernel

On Fri, Apr 30, 2010 at 10:07 PM, Andrew Morton
<akpm@linux-foundation.org> wrote:
> I had to fiddle with it:
> - use tolower(), saving 3 bytes!
> - test the more common case first - it's quicker.
Agreed in conjunction with comment from Joe Perches.
I'll resend new patch soon.


-- 
With Best Regards,
Andy Shevchenko

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 05/10] drivers: net: use new hex_to_bin() method
  2010-04-30  9:34 ` [PATCH 05/10] " Andy Shevchenko
@ 2010-05-04  0:14   ` Divy Le Ray
  0 siblings, 0 replies; 16+ messages in thread
From: Divy Le Ray @ 2010-05-04  0:14 UTC (permalink / raw)
  To: Andy Shevchenko; +Cc: linux-kernel, Andrew Morton

On 04/30/2010 02:34 AM, Andy Shevchenko wrote:
> Get rid of own implementation of hex_to_bin(). It requires to have hex_to_bin()
> introduced by starter patch in series.
>
> Signed-off-by: Andy Shevchenko<ext-andriy.shevchenko@nokia.com>
> Cc: Divy Le Ray<divy@chelsio.com>
> Cc: Andrew Morton<akpm@linux-foundation.org>
>    

Acked-by: Divy Le Ray <divy@chelsio.com>

> ---
>   drivers/net/cxgb3/t3_hw.c |   16 ++++------------
>   1 files changed, 4 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/net/cxgb3/t3_hw.c b/drivers/net/cxgb3/t3_hw.c
> index 95a8ba0..427c451 100644
> --- a/drivers/net/cxgb3/t3_hw.c
> +++ b/drivers/net/cxgb3/t3_hw.c
> @@ -679,14 +679,6 @@ int t3_seeprom_wp(struct adapter *adapter, int enable)
>   	return t3_seeprom_write(adapter, EEPROM_STAT_ADDR, enable ? 0xc : 0);
>   }
>
> -/*
> - * Convert a character holding a hex digit to a number.
> - */
> -static unsigned int hex2int(unsigned char c)
> -{
> -	return isdigit(c) ? c - '0' : toupper(c) - 'A' + 10;
> -}
> -
>   /**
>    *	get_vpd_params - read VPD parameters from VPD EEPROM
>    *	@adapter: adapter to read
> @@ -727,15 +719,15 @@ static int get_vpd_params(struct adapter *adapter, struct vpd_params *p)
>   		p->port_type[0] = uses_xaui(adapter) ? 1 : 2;
>   		p->port_type[1] = uses_xaui(adapter) ? 6 : 2;
>   	} else {
> -		p->port_type[0] = hex2int(vpd.port0_data[0]);
> -		p->port_type[1] = hex2int(vpd.port1_data[0]);
> +		p->port_type[0] = hex_to_bin(vpd.port0_data[0]);
> +		p->port_type[1] = hex_to_bin(vpd.port1_data[0]);
>   		p->xauicfg[0] = simple_strtoul(vpd.xaui0cfg_data, NULL, 16);
>   		p->xauicfg[1] = simple_strtoul(vpd.xaui1cfg_data, NULL, 16);
>   	}
>
>   	for (i = 0; i<  6; i++)
> -		p->eth_base[i] = hex2int(vpd.na_data[2 * i]) * 16 +
> -				 hex2int(vpd.na_data[2 * i + 1]);
> +		p->eth_base[i] = hex_to_bin(vpd.na_data[2 * i]) * 16 +
> +				 hex_to_bin(vpd.na_data[2 * i + 1]);
>   	return 0;
>   }
>
>    


^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2010-05-04  0:14 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-04-30  9:33 [PATCH 00/10] Introduce common hex_to_bin() helper Andy Shevchenko
2010-04-30  9:34 ` [PATCH 01/10] lib: introduce common method to convert hex digits Andy Shevchenko
2010-04-30 19:07   ` Andrew Morton
2010-05-01  2:55     ` Joe Perches
2010-05-02 18:12     ` Andy Shevchenko
2010-04-30  9:34 ` [PATCH 02/10] drivers: isdn: use new hex_to_bin() method Andy Shevchenko
2010-04-30  9:34 ` [PATCH 03/10] usb: atm: speedtch: " Andy Shevchenko
2010-04-30  9:34 ` [PATCH 04/10] drivers: net: " Andy Shevchenko
2010-04-30  9:34 ` [PATCH 05/10] " Andy Shevchenko
2010-05-04  0:14   ` Divy Le Ray
2010-04-30  9:34 ` [PATCH 06/10] sysctl: don't use own implementation of hex_to_bin() Andy Shevchenko
2010-04-30  9:34 ` [PATCH 07/10] staging: rt2860: use new hex_to_bin() method Andy Shevchenko
2010-04-30  9:34 ` [PATCH 08/10] fs: ldm: don't use own implementation of hex_to_bin() Andy Shevchenko
2010-04-30  9:34 ` [PATCH 09/10] drivers: wireless: use new hex_to_bin() method Andy Shevchenko
2010-04-30 18:14   ` John W. Linville
2010-04-30  9:34 ` [PATCH 10/10] drivers: acpi: don't use own implementation of hex_to_bin() Andy Shevchenko

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox