tcm_fc: remove custom hex_to_bin in ft_parse_wwn
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Fri, 30 Sep 2011 11:45:40 +0000 (14:45 +0300)
committerNicholas Bellinger <nab@linux-iscsi.org>
Mon, 24 Oct 2011 03:20:49 +0000 (03:20 +0000)
This patch converts ft_parse_wwn() to use hex_to_bin() instead of custom
conversion code.

(Andy: Re-add missing strict && isupper(c) check)

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: "Nicholas A. Bellinger" <nab@linux-iscsi.org>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
drivers/target/tcm_fc/tfc_conf.c

index b30eace70d350c7b2bff7a881bc5c1df3ddca611..5f770412ca403265ddfc19856ef4934470a25c63 100644 (file)
@@ -31,6 +31,7 @@
 #include <linux/types.h>
 #include <linux/string.h>
 #include <linux/configfs.h>
+#include <linux/kernel.h>
 #include <linux/ctype.h>
 #include <asm/unaligned.h>
 #include <scsi/scsi.h>
@@ -70,10 +71,10 @@ static ssize_t ft_parse_wwn(const char *name, u64 *wwn, int strict)
 {
        const char *cp;
        char c;
-       u32 nibble;
        u32 byte = 0;
        u32 pos = 0;
        u32 err;
+       int val;
 
        *wwn = 0;
        for (cp = name; cp < &name[FT_NAMELEN - 1]; cp++) {
@@ -94,13 +95,10 @@ static ssize_t ft_parse_wwn(const char *name, u64 *wwn, int strict)
                        return cp - name;
                }
                err = 3;
-               if (isdigit(c))
-                       nibble = c - '0';
-               else if (isxdigit(c) && (islower(c) || !strict))
-                       nibble = tolower(c) - 'a' + 10;
-               else
+               val = hex_to_bin(c);
+               if (val < 0 || (strict && isupper(c)))
                        goto fail;
-               *wwn = (*wwn << 4) | nibble;
+               *wwn = (*wwn << 4) | val;
        }
        err = 4;
 fail: