diff options
author | Andy Shevchenko <andy.shevchenko@gmail.com> | 2010-09-21 06:40:25 (GMT) |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2010-09-22 02:45:07 (GMT) |
commit | e7f483eabea8ef6d2b5ce1b74c8184cc06819f15 (patch) | |
tree | 5c3e397ed7e31886d39e1140bb6aa278e138f36f | |
parent | 1117449276bb909b029ed0b9ba13f53e4784db9d (diff) | |
download | linux-e7f483eabea8ef6d2b5ce1b74c8184cc06819f15.tar.xz |
sunrpc/cache: don't use custom hex_to_bin() converter
Signed-off-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Cc: Trond Myklebust <Trond.Myklebust@netapp.com>
Cc: linux-nfs@vger.kernel.org
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
-rw-r--r-- | net/sunrpc/cache.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/net/sunrpc/cache.c b/net/sunrpc/cache.c index 2a84051..ac2c6e6 100644 --- a/net/sunrpc/cache.c +++ b/net/sunrpc/cache.c @@ -1179,13 +1179,19 @@ int qword_get(char **bpp, char *dest, int bufsize) if (bp[0] == '\\' && bp[1] == 'x') { /* HEX STRING */ bp += 2; - while (isxdigit(bp[0]) && isxdigit(bp[1]) && len < bufsize) { - int byte = isdigit(*bp) ? *bp-'0' : toupper(*bp)-'A'+10; - bp++; - byte <<= 4; - byte |= isdigit(*bp) ? *bp-'0' : toupper(*bp)-'A'+10; - *dest++ = byte; - bp++; + while (len < bufsize) { + int h, l; + + h = hex_to_bin(bp[0]); + if (h < 0) + break; + + l = hex_to_bin(bp[1]); + if (l < 0) + break; + + *dest++ = (h << 4) | l; + bp += 2; len++; } } else { |