Skip to contentSkip to conversation

fat: Clean up xlate_to_uni.

PATCH In review Namjae Jeon 2 participants 4 messages Mar 3, 2012 – Mar 4, 2012 VFAT/FAT/msdos filesystem

lore
Share & tools
lore
#0 lore raw

PATCH 1/2 fat: Clean up xlate_to_uni.

The xlate_to_uni is called by vfat_build_slots with sbi->nls_io as the final
argument. nls_io can never be null at this point because the check is already being done in fat_fill_super wherein the mount fails if it is null.

---
 fs/fat/namei_vfat.c |   83 ++++++++++++++++++++++-----------------------------
 1 files changed, 36 insertions(+), 47 deletions(-)
fs/fat/namei_vfat.c +36 -47
index a81eb23..aae3b4e 100644
@@ -521,57 +521,46 @@ xlate_to_uni(const unsigned char *name, int len, unsigned char *outname,
 
 		op = &outname[*outlen * sizeof(wchar_t)];
 	} else {
-		if (nls) {
-			for (i = 0, ip = name, op = outname, *outlen = 0;
-			     i < len && *outlen <= FAT_LFN_LEN;
-			     *outlen += 1)
-			{
-				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;
+		for (i = 0, ip = name, op = outname, *outlen = 0;
+			 i < len && *outlen <= FAT_LFN_LEN;
+			 *outlen += 1) {
+			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;
 					}
-					*op++ = ec & 0xFF;
-					*op++ = ec >> 8;
-					ip += 5;
-					i += 5;
-				} else {
-					if ((charlen = nls->char2uni(ip, len - i, (wchar_t *)op)) < 0)
-						return -EINVAL;
-					ip += charlen;
-					i += charlen;
-					op += 2;
+					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;
+				ip += 5;
+				i += 5;
+			} else {
+				charlen = nls->char2uni(ip, len - i,
+									(wchar_t *)op);
+				if (charlen < 0)
+					return -EINVAL;
+				ip += charlen;
+				i += charlen;
+				op += 2;
 			}
-			if (i < len)
-				return -ENAMETOOLONG;
-		} else {
-			for (i = 0, ip = name, op = outname, *outlen = 0;
-			     i < len && *outlen <= FAT_LFN_LEN;
-			     i++, *outlen += 1)
-			{
-				*op++ = *ip++;
-				*op++ = 0;
-			}
-			if (i < len)
-				return -ENAMETOOLONG;
 		}
+		if (i < len)
+			return -ENAMETOOLONG;
 	}
 
 	*longlen = *outlen;
Signature · 1 line
1.7.5.4
maintainer Acked-by on v1 1/2
#1 lore raw
Quoted 2 lines · Namjae Jeon

The xlate_to_uni is called by vfat_build_slots with sbi->nls_io as the final
argument. nls_io can never be null at this point because the check is already being done in fat_fill_super wherein the mount fails if it is null.

Looks good to me. And now, I don't have public repo after kernel.org break in. It would be better to pass akpm.

Quoted 104 lines
---
 fs/fat/namei_vfat.c |   83 ++++++++++++++++++++++-----------------------------
 1 files changed, 36 insertions(+), 47 deletions(-)
fs/fat/namei_vfat.c +36 -47
index a81eb23..aae3b4e 100644
@@ -521,57 +521,46 @@ xlate_to_uni(const unsigned char *name, int len, unsigned char *outname,
 
 		op = &outname[*outlen * sizeof(wchar_t)];
 	} else {
-		if (nls) {
-			for (i = 0, ip = name, op = outname, *outlen = 0;
-			     i < len && *outlen <= FAT_LFN_LEN;
-			     *outlen += 1)
-			{
-				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;
+		for (i = 0, ip = name, op = outname, *outlen = 0;
+			 i < len && *outlen <= FAT_LFN_LEN;
+			 *outlen += 1) {
+			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;
 					}
-					*op++ = ec & 0xFF;
-					*op++ = ec >> 8;
-					ip += 5;
-					i += 5;
-				} else {
-					if ((charlen = nls->char2uni(ip, len - i, (wchar_t *)op)) < 0)
-						return -EINVAL;
-					ip += charlen;
-					i += charlen;
-					op += 2;
+					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;
+				ip += 5;
+				i += 5;
+			} else {
+				charlen = nls->char2uni(ip, len - i,
+									(wchar_t *)op);
+				if (charlen < 0)
+					return -EINVAL;
+				ip += charlen;
+				i += charlen;
+				op += 2;
 			}
-			if (i < len)
-				return -ENAMETOOLONG;
-		} else {
-			for (i = 0, ip = name, op = outname, *outlen = 0;
-			     i < len && *outlen <= FAT_LFN_LEN;
-			     i++, *outlen += 1)
-			{
-				*op++ = *ip++;
-				*op++ = 0;
-			}
-			if (i < len)
-				return -ENAMETOOLONG;
 		}
+		if (i < len)
+			return -ENAMETOOLONG;
 	}
 
 	*longlen = *outlen;
Signature · 1 line
OGAWA Hirofumi <[email protected]>
maintainer
#2 lore raw
Quoted 11 lines · OGAWA Hirofumi
Quoted 4 lines · Namjae Jeon

The xlate_to_uni is called by vfat_build_slots with sbi->nls_io as the final argument. nls_io can never be null at this point because the check
is already being done in fat_fill_super wherein the mount fails if it is null.

Looks good to me. And now, I don't have public repo after kernel.org break in. It would be better to pass akpm.

Sigh. My ISP's smtp seems to be blocked due to BRBL. Please forward to akpm.

Quoted 104 lines
Quoted 104 lines
---
 fs/fat/namei_vfat.c |   83 ++++++++++++++++++++++-----------------------------
 1 files changed, 36 insertions(+), 47 deletions(-)
fs/fat/namei_vfat.c +36 -47
index a81eb23..aae3b4e 100644
@@ -521,57 +521,46 @@ xlate_to_uni(const unsigned char *name, int len, unsigned char *outname,
 
 		op = &outname[*outlen * sizeof(wchar_t)];
 	} else {
-		if (nls) {
-			for (i = 0, ip = name, op = outname, *outlen = 0;
-			     i < len && *outlen <= FAT_LFN_LEN;
-			     *outlen += 1)
-			{
-				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;
+		for (i = 0, ip = name, op = outname, *outlen = 0;
+			 i < len && *outlen <= FAT_LFN_LEN;
+			 *outlen += 1) {
+			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;
 					}
-					*op++ = ec & 0xFF;
-					*op++ = ec >> 8;
-					ip += 5;
-					i += 5;
-				} else {
-					if ((charlen = nls->char2uni(ip, len - i, (wchar_t *)op)) < 0)
-						return -EINVAL;
-					ip += charlen;
-					i += charlen;
-					op += 2;
+					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;
+				ip += 5;
+				i += 5;
+			} else {
+				charlen = nls->char2uni(ip, len - i,
+									(wchar_t *)op);
+				if (charlen < 0)
+					return -EINVAL;
+				ip += charlen;
+				i += charlen;
+				op += 2;
 			}
-			if (i < len)
-				return -ENAMETOOLONG;
-		} else {
-			for (i = 0, ip = name, op = outname, *outlen = 0;
-			     i < len && *outlen <= FAT_LFN_LEN;
-			     i++, *outlen += 1)
-			{
-				*op++ = *ip++;
-				*op++ = 0;
-			}
-			if (i < len)
-				return -ENAMETOOLONG;
 		}
+		if (i < len)
+			return -ENAMETOOLONG;
 	}
 
 	*longlen = *outlen;
Signature · 1 line
OGAWA Hirofumi <[email protected]>
author Acked-by OGAWA Hirofumi
#3 lore raw

Hi. Andrew.

I tried to forward to you by ogawa request. Would you plz check this patch ?
-----------------------------------------------------------------------------------------------------------

Quoted 1 line

From OGAWA Hirofumi.

Looks good to me. And now, I don't have public repo after kernel.org break in. It would be better to pass akpm.

-------------------------------------------------------------------------------------------------------------

Thanks.

2012/3/4 OGAWA Hirofumi <[email protected]>:

Quoted 119 lines
Quoted 11 lines · OGAWA Hirofumi
Quoted 4 lines · Namjae Jeon

 The xlate_to_uni is called by vfat_build_slots with sbi->nls_io as the final argument. nls_io can never be null at this point because the check is already being done in fat_fill_super wherein the mount fails if it is null.

Looks good to me. And now, I don't have public repo after kernel.org break in. It would be better to pass akpm.

Sigh. My ISP's smtp seems to be blocked due to BRBL. Please forward to akpm.

Quoted 103 lines
Quoted 103 lines

---
 fs/fat/namei_vfat.c |   83 ++++++++++++++++++++++-----------------------------

 1 files changed, 36 insertions(+), 47 deletions(-)
fs/fat/namei_vfat.c +36 -47
index a81eb23..aae3b4e 100644
@@ -521,57 +521,46 @@ xlate_to_uni(const unsigned char *name, int len, unsigned char *outname,
 
              op = &outname[*outlen * sizeof(wchar_t)];
      } else {
-            if (nls) {
-                    for (i = 0, ip = name, op = outname, *outlen = 0;
-                         i < len && *outlen <= FAT_LFN_LEN;
-                         *outlen += 1)
-                    {
-                            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;
+            for (i = 0, ip = name, op = outname, *outlen = 0;
+                     i < len && *outlen <= FAT_LFN_LEN;
+                     *outlen += 1) {
+                    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;
                                      }
-                                    *op++ = ec & 0xFF;
-                                    *op++ = ec >> 8;
-                                    ip += 5;
-                                    i += 5;
-                            } else {
-                                    if ((charlen = nls->char2uni(ip, len - i, (wchar_t *)op)) < 0)
-                                            return -EINVAL;
-                                    ip += charlen;
-                                    i += charlen;
-                                    op += 2;
+                                    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;
+                            ip += 5;
+                            i += 5;
+                    } else {
+                            charlen = nls->char2uni(ip, len - i,
+                                                                    (wchar_t *)op);
+                            if (charlen < 0)
+                                    return -EINVAL;
+                            ip += charlen;
+                            i += charlen;
+                            op += 2;
                      }
-                    if (i < len)
-                            return -ENAMETOOLONG;
-            } else {
-                    for (i = 0, ip = name, op = outname, *outlen = 0;
-                         i < len && *outlen <= FAT_LFN_LEN;
-                         i++, *outlen += 1)
-                    {
-                            *op++ = *ip++;
-                            *op++ = 0;
-                    }
-                    if (i < len)
-                            return -ENAMETOOLONG;
              }
+            if (i < len)
+                    return -ENAMETOOLONG;
      }
 
Quoted 4 lines
Quoted 1 line

fs/fat/namei_vfat.c xlate_to_uni(const unsigned char *name, int len, unsigned char *outname, · line 566

Quoted 1 line
fs/fat/namei_vfat.c +0 -0
      *longlen = *outlen;

--
OGAWA Hirofumi <[email protected]>

���{.n�+�������+%�����ݶ��w��{.n�+����{��G�����{ay�ʇڙ�,j��f���h��������z_�(�階�ݢj"���m������G������?����&���~��iO��z��v�^�m���� ������?�I�