VirtualBox

Changeset 69622 in vbox


Ignore:
Timestamp:
Nov 8, 2017 5:52:25 PM (7 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
118982
Message:

fatvfs.cpp: name conversion issue in read dir

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/fs/fatvfs.cpp

    r69621 r69622  
    2929*   Header Files                                                                                                                 *
    3030*********************************************************************************************************************************/
     31#define RTMEM_WRAP_TO_EF_APIS
    3132#define LOG_GROUP RTLOGGROUP_FS
    3233#include "internal/iprt.h"
     
    437438 * @remarks Lower case characters are all marked invalid.
    438439 */
    439 static RTUTF16 g_awchFatCp437Chars[] =
     440static RTUTF16 g_awchFatCp437ValidChars[] =
    440441{ /*     0,      1,      2,      3,      4,      5,      6,      7,      8,      9,      a,      b,      c,      d,      e,      f */
    441442    0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
     
    447448    0x0060, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe,
    448449    0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xffff, 0xffff, 0xffff, 0x007e, 0xffff,
     450    0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7, 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x00c5,
     451    0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9, 0x00ff, 0x00d6, 0x00dc, 0x00a2, 0x00a3, 0x00a5, 0x20a7, 0x0192,
     452    0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba, 0x00bf, 0x2310, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb,
     453    0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510,
     454    0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f, 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567,
     455    0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b, 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580,
     456    0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4, 0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229,
     457    0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248, 0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0
     458};
     459AssertCompileSize(g_awchFatCp437ValidChars, 256*2);
     460
     461/**
     462 * Codepage 437 translation table without invalid 8.3. character markings.
     463 */
     464static RTUTF16 g_awchFatCp437Chars[] =
     465{ /*     0,      1,      2,      3,      4,      5,      6,      7,      8,      9,      a,      b,      c,      d,      e,      f */
     466    0x0000, 0x263a, 0x263b, 0x2665, 0x2666, 0x2663, 0x2660, 0x2022, 0x25d8, 0x25cb, 0x25d9, 0x2642, 0x2640, 0x266a, 0x266b, 0x263c,
     467    0x25ba, 0x25c4, 0x2195, 0x203c, 0x00b6, 0x00a7, 0x25ac, 0x21a8, 0x2191, 0x2193, 0x2192, 0x2190, 0x221f, 0x2194, 0x25b2, 0x25bc,
     468    0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
     469    0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
     470    0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
     471    0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
     472    0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
     473    0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x2302,
    449474    0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7, 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x00c5,
    450475    0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9, 0x00ff, 0x00d6, 0x00dc, 0x00a2, 0x00a3, 0x00a5, 0x20a7, 0x0192,
     
    24922517    if (uc < 128)
    24932518    {
    2494         if (g_awchFatCp437Chars[uc] == uc)
     2519        if (g_awchFatCp437ValidChars[uc] == uc)
    24952520            return (uint16_t)uc;
    24962521        if (RT_C_IS_LOWER(uc))
     
    25052530    RTUNICP ucUpper = RTUniCpToUpper(uc);
    25062531    for (unsigned i = 128; i < 256; i++)
    2507         if (g_awchFatCp437Chars[i] == ucUpper)
     2532        if (g_awchFatCp437ValidChars[i] == ucUpper)
    25082533            return i;
    25092534    if (ucUpper != uc)
    25102535        for (unsigned i = 128; i < 256; i++)
    2511             if (g_awchFatCp437Chars[i] == uc)
     2536            if (g_awchFatCp437ValidChars[i] == uc)
    25122537                return i;
    25132538    return UINT16_MAX;
     
    29422967            if (wc < 128)
    29432968            {
    2944                 if (g_awchFatCp437Chars[wc] <= UINT16_C(0xfffe))
     2969                if (g_awchFatCp437ValidChars[wc] <= UINT16_C(0xfffe))
    29452970                { /* likely */ }
    29462971                else
     
    29823007                if (uc < 128)
    29833008                {
    2984                     if (g_awchFatCp437Chars[uc] != uc)
     3009                    if (g_awchFatCp437ValidChars[uc] != uc)
    29853010                    {
    29863011                        if (uc)
    29873012                        {
    29883013                            uc = RTUniCpToUpper(uc);
    2989                             if (g_awchFatCp437Chars[uc] != uc)
     3014                            if (g_awchFatCp437ValidChars[uc] != uc)
    29903015                                uc = '_';
    29913016                        }
     
    41644189                if (RT_SUCCESS(rc))
    41654190                    pThis->offDir = offEntryInDir + sizeof(paEntries[iEntry]) + 2;
     4191                Assert(RTStrValidateEncoding(pDirEntry->szName) == VINF_SUCCESS);
    41664192                return rc;
    41674193            }
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette