Messages in this thread | | | From | OGAWA Hirofumi <> | Subject | Re: [PATCH 1/2] fat: Clean up xlate_to_uni. | Date | Sun, 04 Mar 2012 05:58:39 +0900 |
| |
Namjae Jeon <linkinjeon@gmail.com> writes:
> 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.
Acked-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
> Signed-off-by: Namjae Jeon <linkinjeon@gmail.com> > Signed-off-by: Ravishankar N <cyberax82@gmail.com> > --- > fs/fat/namei_vfat.c | 83 ++++++++++++++++++++++----------------------------- > 1 files changed, 36 insertions(+), 47 deletions(-) > > diff --git a/fs/fat/namei_vfat.c b/fs/fat/namei_vfat.c > index a81eb23..aae3b4e 100644 > --- a/fs/fat/namei_vfat.c > +++ b/fs/fat/namei_vfat.c > @@ -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;
-- OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
| |