<div>Hello everyone,</div><div>We'v found a long file name issue of FAT in our application.</div><div><br></div><div>When create a long name file on SD card in rtems system, <span style="line-height: 1.5;">it can display the right long name.</span></div><div>But if use the SD card in Windows, <span style="line-height: 1.5;">it just display the short name of the file, like "ABCDE1~4.TXT", :(</span></div><div><br></div><div>I trace the code, the root cause of this issue is in <span style="white-space: pre-wrap; font-size: 13px; line-height: normal;">msdos_add_file function, </span><span style="font-size: 13px; line-height: normal; white-space: pre-wrap;">near line 1837.</span></div><div><span style="font-size: 13px; line-height: normal; white-space: pre-wrap;">The unicode coding of long file name use the 0x0000 as the end flag, </span><span style="line-height: normal; white-space: pre-wrap; font-size: small;">the memory content is unknown </span><span style="font-size: small; line-height: normal; white-space: pre-wrap;">after the flag</span><span style="font-size: small; line-height: normal; white-space: pre-wrap;">.</span></div><div><font size="2"><span style="line-height: normal; white-space: pre-wrap;"><br></span></font></div><div><span style="white-space: pre-wrap; font-size: 13px; line-height: normal;">When fill the long name in </span><span style="white-space: pre-wrap; font-size: 13px; line-height: normal;">MSDOS_LFN_ENTRY, </span><span style="font-size: 13px; line-height: normal; white-space: pre-wrap;">current code want to fill 0xffff  after the flag.</span></div><div><span style="font-size: 13px; line-height: normal; white-space: pre-wrap;">But it not consider </span><span style="font-size: small; line-height: normal; white-space: pre-wrap;">the memory content is unknown <span style="display: none; line-height: 0px;" id="_editor_bookmark_start_2">‍</span></span><span style="font-size: small; line-height: normal; white-space: pre-wrap;">after the end flag, </span><span style="font-size: small; line-height: normal; white-space: pre-wrap;">continue copying the </span><span style="font-size: small; line-height: normal; white-space: pre-wrap;">content</span><span style="font-size: 13px; line-height: normal; white-space: pre-wrap;">.</span><span style="font-size: small; line-height: normal; white-space: pre-wrap;"> </span></div><div><span style="white-space: pre-wrap; font-size: 13px; line-height: normal;">------------------------------------------------------------</span></div><div><pre style="padding: 0px; margin-top: 0px; margin-bottom: 0px; font-size: 13px; line-height: normal;"><code>for (i = 0; i < MSDOS_LFN_LEN_PER_ENTRY; ++i)
{
    if (!(*n == 0 && *(n+1) == 0))//xxx, after the flag, the condition is no use, should fill 0xffff.
    {
        *p = *n;
        *(p+1) = *(n+1);
    }
    else
    {
        p [0] = fill;
        p [1] = fill;
        fill = 0xff;
    }
<span style="font-family: Verdana;">------------------------------------------------------------<span style="display: none; line-height: 0px;" id="_editor_bookmark_start_3">‍</span></span><span style="display: none; line-height: 0px;" id="_editor_bookmark_start_2">‍</span></code></pre></div>