VirtualBox

Changeset 79570 in vbox


Ignore:
Timestamp:
Jul 7, 2019 12:40:40 AM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
131860
Message:

IPRT: Added RTPathPurgeFilename for making valid filenames out of random strings. bugref:9288

Location:
trunk
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/iprt/mangling.h

    r79562 r79570  
    16441644# define RTPathParsedReassemble                         RT_MANGLER(RTPathParsedReassemble)
    16451645# define RTPathParseSimple                              RT_MANGLER(RTPathParseSimple)
     1646# define RTPathPurgeFilename                            RT_MANGLER(RTPathPurgeFilename)
    16461647# define RTPathQueryInfo                                RT_MANGLER(RTPathQueryInfo)
    16471648# define RTPathQueryInfoEx                              RT_MANGLER(RTPathQueryInfoEx)
  • trunk/include/iprt/path.h

    r78702 r79570  
    454454 */
    455455RTDECL(char *) RTPathChangeToUnixSlashes(char *pszPath, bool fForce);
     456
     457/**
     458 * Purges a string so it can be used as a file according to fFlags.
     459 *
     460 * Illegal filename characters are replaced by '_'.
     461 *
     462 * @returns pszString
     463 * @param   pszString   The string to purge.
     464 * @param   fFlags      One of the RTPATH_STR_F_STYLE_XXX flags.  Most users
     465 *                      will pass RTPATH_STR_F_STYLE_HOST (0).
     466 */
     467RTDECL(char *) RTPathPurgeFilename(char *pszString, uint32_t fFlags);
    456468
    457469/**
  • trunk/src/VBox/Runtime/Makefile.kmk

    r79019 r79570  
    533533        common/path/RTPathParsedReassemble.cpp \
    534534        common/path/RTPathParseSimple.cpp \
     535        common/path/RTPathPurgeFilename.cpp \
    535536        common/path/RTPathRealDup.cpp \
    536537        common/path/RTPathRmCmd.cpp \
  • trunk/src/VBox/Runtime/testcase/tstRTPath.cpp

    r78702 r79570  
    251251                             i, cchParent2, cchExpected, s_aTests[i].pszPath);
    252252        }
     253    }
     254}
     255
     256
     257static void testPurgeFilename(RTTEST hTest)
     258{
     259    static struct
     260    {
     261        const char *pszIn, *pszOut;
     262        uint32_t    fFlags;
     263    } const s_aTests[] =
     264    {
     265        { "start///end",            "start___end",      RTPATH_STR_F_STYLE_UNIX },
     266        { "start///end",            "start___end",      RTPATH_STR_F_STYLE_DOS },
     267        { "start///end",            "start___end",      RTPATH_STR_F_STYLE_HOST },
     268        { "1:<>\\9",                "1:<>\\9",          RTPATH_STR_F_STYLE_UNIX },
     269        { "1:<>\\9",                "1____9",           RTPATH_STR_F_STYLE_DOS },
     270        { "\t\r\n",                 "\t\r\n",           RTPATH_STR_F_STYLE_UNIX },
     271        { "\t\r\n",                 "___",              RTPATH_STR_F_STYLE_DOS },
     272    };
     273    RTTestSub(hTest, "RTPathPurgeFilename");
     274    for (uint32_t i = 0; i < RT_ELEMENTS(s_aTests); i++)
     275    {
     276        char szPath[RTPATH_MAX];
     277        strcpy(szPath, s_aTests[i].pszIn);
     278        char *pszRet = RTPathPurgeFilename(szPath, s_aTests[i].fFlags);
     279        RTTEST_CHECK(hTest, pszRet == &szPath[0]);
     280        if (strcmp(szPath, s_aTests[i].pszOut) != 0)
     281            RTTestFailed(hTest, "sub-test #%u: got '%s', expected '%s' (style %#x)",
     282                         i, szPath, s_aTests[i].pszOut, s_aTests[i].fFlags);
    253283    }
    254284}
     
    9831013    testParserAndSplitter(hTest);
    9841014    testParentLength(hTest);
     1015    testPurgeFilename(hTest);
    9851016
    9861017    /*
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