Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1700314

[PATCH v5] vfat: Deduplicate hex2bin()

From OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
Newsgroups linux.kernel
Subject [PATCH v5] vfat: Deduplicate hex2bin()
Date 2017-07-31 20:50 +0200
Message-ID <u9nVn-1jR-13@gated-at.bofh.it> (permalink)
References <u9k1s-7qO-3@gated-at.bofh.it> <u9nVn-1jR-15@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


We may use hex2bin() instead of custom approach.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
---

 fs/fat/namei_vfat.c |   35 ++++++++++++-----------------------
 1 file changed, 12 insertions(+), 23 deletions(-)

diff -puN fs/fat/namei_vfat.c~fat-dont-use-custom-hex2bin fs/fat/namei_vfat.c
--- linux/fs/fat/namei_vfat.c~fat-dont-use-custom-hex2bin	2017-01-07 09:52:14.981693213 +0900
+++ linux-hirofumi/fs/fat/namei_vfat.c	2017-01-07 09:52:14.982693219 +0900
@@ -19,6 +19,8 @@
 #include <linux/ctype.h>
 #include <linux/slab.h>
 #include <linux/namei.h>
+#include <linux/kernel.h>
+
 #include "fat.h"
 
 static inline unsigned long vfat_d_version(struct dentry *dentry)
@@ -510,10 +512,8 @@ xlate_to_uni(const unsigned char *name,
 	     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;
 
 	if (utf8) {
@@ -530,33 +530,22 @@ xlate_to_uni(const unsigned char *name,
 			 i < len && *outlen < FAT_LFN_LEN;
 			 *outlen += 1) {
 			if (escape && (*ip == ':')) {
+				u8 uc[2];
+
 				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;
-					}
+
+				if (hex2bin(uc, ip + 1, 2) < 0)
 					return -EINVAL;
-				}
-				*op++ = ec & 0xFF;
-				*op++ = ec >> 8;
+
+				*(wchar_t *)op = uc[0] << 8 | uc[1];
+
+				op += 2;
 				ip += 5;
 				i += 5;
 			} else {
 				charlen = nls->char2uni(ip, len - i,
-									(wchar_t *)op);
+							(wchar_t *)op);
 				if (charlen < 0)
 					return -EINVAL;
 				ip += charlen;
_

-- 
OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>

Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH v5] vfat: Deduplicate hex2bin() Andy Shevchenko <andriy.shevchenko@linux.intel.com> - 2017-07-31 16:40 +0200
  [PATCH v5] vfat: Deduplicate hex2bin() OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> - 2017-07-31 20:50 +0200
    Re: [PATCH v5] vfat: Deduplicate hex2bin() Andy Shevchenko <andy.shevchenko@gmail.com> - 2017-07-31 21:40 +0200
      Re: [PATCH v5] vfat: Deduplicate hex2bin() OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> - 2017-07-31 23:00 +0200
        Re: [PATCH v5] vfat: Deduplicate hex2bin() Andy Shevchenko <andriy.shevchenko@linux.intel.com> - 2017-08-01 15:00 +0200
  Re: [PATCH v5] vfat: Deduplicate hex2bin() OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> - 2017-07-31 20:50 +0200
    Re: [PATCH v5] vfat: Deduplicate hex2bin() Andy Shevchenko <andriy.shevchenko@linux.intel.com> - 2017-07-31 21:40 +0200
      Re: [PATCH v5] vfat: Deduplicate hex2bin() OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> - 2017-07-31 23:00 +0200

csiph-web