char* outp = output;
wchar_t wc;
- while (inp - input < insize && le16_to_cpu(*inp))
+ while (inp - input < insize)
{
inp = utf16_to_wchar(inp, &wc, insize - (inp - input));
if (inp == NULL)
exfat_error("name is too long");
return -ENAMETOOLONG;
}
+ if (wc == 0)
+ return 0;
+ }
+ if (outp - output >= outsize)
+ {
+ exfat_error("name is too long");
+ return -ENAMETOOLONG;
}
*outp = '\0';
return 0;
le16_t* outp = output;
wchar_t wc;
- while (inp - input < insize && *inp)
+ while (inp - input < insize)
{
inp = utf8_to_wchar(inp, &wc, insize - (inp - input));
if (inp == NULL)
exfat_error("name is too long");
return -ENAMETOOLONG;
}
+ if (wc == 0)
+ break;
+ }
+ if (outp - output >= outsize)
+ {
+ exfat_error("name is too long");
+ return -ENAMETOOLONG;
}
*outp = cpu_to_le16(0);
return 0;