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)];
|
||||
} 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;
|
||||
|
Loading…
Reference in New Issue
Block a user