|
@@ -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;
|