forked from Minki/linux
fat: clean up xlate_to_uni()
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. Signed-off-by: Namjae Jeon <linkinjeon@gmail.com> Signed-off-by: Ravishankar N <cyberax82@gmail.com> Acked-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
9eab0a788d
commit
41f0c02eac
@ -521,57 +521,46 @@ xlate_to_uni(const unsigned char *name, int len, unsigned char *outname,
|
|||||||
|
|
||||||
op = &outname[*outlen * sizeof(wchar_t)];
|
op = &outname[*outlen * sizeof(wchar_t)];
|
||||||
} else {
|
} else {
|
||||||
if (nls) {
|
for (i = 0, ip = name, op = outname, *outlen = 0;
|
||||||
for (i = 0, ip = name, op = outname, *outlen = 0;
|
i < len && *outlen <= FAT_LFN_LEN;
|
||||||
i < len && *outlen <= FAT_LFN_LEN;
|
*outlen += 1) {
|
||||||
*outlen += 1)
|
if (escape && (*ip == ':')) {
|
||||||
{
|
if (i > len - 5)
|
||||||
if (escape && (*ip == ':')) {
|
return -EINVAL;
|
||||||
if (i > len - 5)
|
ec = 0;
|
||||||
return -EINVAL;
|
for (k = 1; k < 5; k++) {
|
||||||
ec = 0;
|
nc = ip[k];
|
||||||
for (k = 1; k < 5; k++) {
|
ec <<= 4;
|
||||||
nc = ip[k];
|
if (nc >= '0' && nc <= '9') {
|
||||||
ec <<= 4;
|
ec |= nc - '0';
|
||||||
if (nc >= '0' && nc <= '9') {
|
continue;
|
||||||
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;
|
if (nc >= 'a' && nc <= 'f') {
|
||||||
*op++ = ec >> 8;
|
ec |= nc - ('a' - 10);
|
||||||
ip += 5;
|
continue;
|
||||||
i += 5;
|
}
|
||||||
} else {
|
if (nc >= 'A' && nc <= 'F') {
|
||||||
if ((charlen = nls->char2uni(ip, len - i, (wchar_t *)op)) < 0)
|
ec |= nc - ('A' - 10);
|
||||||
return -EINVAL;
|
continue;
|
||||||
ip += charlen;
|
}
|
||||||
i += charlen;
|
return -EINVAL;
|
||||||
op += 2;
|
|
||||||
}
|
}
|
||||||
|
*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;
|
*longlen = *outlen;
|
||||||
|
Loading…
Reference in New Issue
Block a user