fat: Clean up xlate_to_uni.
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
@@ -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
Quoted 2 lines · Namjae Jeon
The
xlate_to_uniis called byvfat_build_slotswithsbi->nls_ioas the final
argument.nls_iocan never be null at this point because the check is already being done infat_fill_superwherein 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
Signed-off-by Namjae Jeon <[email protected]>Signed-off-by Ravishankar N <[email protected]>--- fs/fat/namei_vfat.c | 83 ++++++++++++++++++++++----------------------------- 1 files changed, 36 insertions(+), 47 deletions(-)fs/fat/namei_vfat.c +36
-47@@ -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]>
OGAWA Hirofumi
maintainerQuoted 11 lines · OGAWA Hirofumi
Quoted 4 lines · Namjae Jeon
The
xlate_to_uniis called byvfat_build_slotswithsbi->nls_ioas the final argument.nls_iocan never be null at this point because the check
is already being done infat_fill_superwherein 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 <[email protected]>
Sigh. My ISP's smtp seems to be blocked due to BRBL. Please forward to akpm.
Quoted 104 lines
Quoted 104 lines
Signed-off-by Namjae Jeon <[email protected]>Signed-off-by Ravishankar N <[email protected]>--- fs/fat/namei_vfat.c | 83 ++++++++++++++++++++++----------------------------- 1 files changed, 36 insertions(+), 47 deletions(-)fs/fat/namei_vfat.c +36
-47@@ -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]>
Namjae Jeon
Acked-by OGAWA HirofumiHi. 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_uniis called byvfat_build_slotswithsbi->nls_ioas the final argument.nls_iocan never be null at this point because the check is already being done infat_fill_superwherein 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 <[email protected]>Sigh. My ISP's smtp seems to be blocked due to BRBL. Please forward to akpm.
Quoted 103 lines
Quoted 103 lines
Signed-off-by Namjae Jeon <[email protected]>Signed-off-by Ravishankar N <[email protected]>---
fs/fat/namei_vfat.c | 83 ++++++++++++++++++++++-----------------------------1 files changed, 36 insertions(+), 47 deletions(-)fs/fat/namei_vfat.c +36
-47@@ -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�