From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752402AbdGaOdy (ORCPT ); Mon, 31 Jul 2017 10:33:54 -0400 Received: from mga07.intel.com ([134.134.136.100]:37041 "EHLO mga07.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752360AbdGaOdx (ORCPT ); Mon, 31 Jul 2017 10:33:53 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.40,442,1496127600"; d="scan'208";a="884673138" From: Andy Shevchenko To: OGAWA Hirofumi , linux-kernel@vger.kernel.org, Joe Perches Cc: Andy Shevchenko Subject: [PATCH v5] vfat: Deduplicate hex2bin() Date: Mon, 31 Jul 2017 17:33:49 +0300 Message-Id: <20170731143349.84629-1-andriy.shevchenko@linux.intel.com> X-Mailer: git-send-email 2.13.2 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org We may use hex2bin() instead of custom approach. Signed-off-by: Andy Shevchenko --- This is blast from the past (2011). Instead of dirty looking bitwise types here, though __be16 would be correct, I decide to go with an array of two u8 items. This patch relies on http://marc.info/?l=linux-kernel&m=150150935411183&w=2 being applied, which is currently not. fs/fat/namei_vfat.c | 35 ++++++++++------------------------- 1 file changed, 10 insertions(+), 25 deletions(-) diff --git a/fs/fat/namei_vfat.c b/fs/fat/namei_vfat.c index 6a7152d0c250..56127f76c41f 100644 --- a/fs/fat/namei_vfat.c +++ b/fs/fat/namei_vfat.c @@ -17,6 +17,7 @@ #include #include +#include #include #include #include "fat.h" @@ -510,11 +511,10 @@ xlate_to_uni(const unsigned char *name, int len, unsigned char *outname, struct nls_table *nls) { const unsigned char *ip; - unsigned char nc; unsigned char *op; - unsigned int ec; - int i, k, fill; + int i, fill; int charlen; + u8 hc[2]; if (utf8) { *outlen = utf8s_to_utf16s(name, len, UTF16_HOST_ENDIAN, @@ -532,31 +532,16 @@ xlate_to_uni(const unsigned char *name, int len, unsigned char *outname, if (escape && (*ip == ':')) { if (i > len - 5) return -EINVAL; - ec = 0; - for (k = 1; k < 5; k++) { - nc = ip[k]; - ec <<= 4; - if (nc >= '0' && nc <= '9') { - ec |= nc - '0'; - continue; - } - if (nc >= 'a' && nc <= 'f') { - ec |= nc - ('a' - 10); - continue; - } - if (nc >= 'A' && nc <= 'F') { - ec |= nc - ('A' - 10); - continue; - } - return -EINVAL; - } - *op++ = ec & 0xFF; - *op++ = ec >> 8; + + fill = hex2bin(hc, ip + 1, 2); + if (fill) + return fill; + *op++ = hc[1]; + *op++ = hc[0]; ip += 5; i += 5; } else { - charlen = nls->char2uni(ip, len - i, - (wchar_t *)op); + charlen = nls->char2uni(ip, len - i, (wchar_t *)op); if (charlen < 0) return -EINVAL; ip += charlen; -- 2.13.2