VirtualBox

Changeset 38453 in vbox


Ignore:
Timestamp:
Aug 15, 2011 9:06:02 AM (13 years ago)
Author:
vboxsync
Message:

VBoxManage/GuestCtrl: Corrected directory open flag, removed unnecessary copy context from ctrlCopyTranslatePath(), started internal testcase for ctrlCopyTranslatePath().

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageGuestCtrl.cpp

    r38446 r38453  
    858858}
    859859
    860 /*
    861  * Source          Dest                 Translated
    862  * c:\foo.txt      c:\from_host         c:\from_host\foo.txt
    863  * c:\asdf\foo     c:\qwer              c:\qwer\foo
    864  * c:\bar\baz.txt  d:\users\            d:\users\baz.txt
    865  * c:\*.dll        e:\baz               e:\baz
     860/**
     861 * Translates a source path to a destintation path (can be both sides,
     862 * either host or guest). The source root is needed to determine the start
     863 * of the relative source path which also needs to present in the destination
     864 * path.
     865 *
     866 * @return  IPRT status code.
     867 * @param   pszSourceRoot           Source root path.
     868 * @param   pszSource               Actual source to transform. Must begin with
     869 *                                  the source root path!
     870 * @param   pszDest                 Destination path.
     871 * @param   ppszTranslated          Pointer to the allocated, translated destination
     872 *                                  path. Must be free'd with RTStrFree().
    866873 */
    867 static int ctrlCopyTranslatePath(PCOPYCONTEXT pContext,
    868                                  const char *pszSourceRoot, const char *pszSource,
     874static int ctrlCopyTranslatePath(const char *pszSourceRoot, const char *pszSource,
    869875                                 const char *pszDest, char **ppszTranslated)
    870876{
    871     AssertPtrReturn(pContext, VERR_INVALID_POINTER);
    872877    AssertPtrReturn(pszSourceRoot, VERR_INVALID_POINTER);
    873878    AssertPtrReturn(pszSource, VERR_INVALID_POINTER);
     
    897902    *ppszTranslated = pszTranslated;
    898903
    899 #ifdef DEBUG
    900     if (pContext->fVerbose)
    901         RTPrintf("Translating root=%s, source=%s, dest=%s -> %s\n",
    902                  pszSourceRoot, pszSource, pszDest, *ppszTranslated);
     904    return vrc;
     905}
     906
     907#ifdef DEBUG_andy
     908static void tstTranslatePath()
     909{
     910    static struct
     911    {
     912        const char *pszSourceRoot;
     913        const char *pszSource;
     914        const char *pszDest;
     915        const char *pszTranslated;
     916        int         iResult;
     917    } aTests[] =
     918    {
     919        /* Invalid stuff. */
     920        { NULL, NULL, NULL, NULL, VERR_INVALID_POINTER },
     921        /* Windows paths. */
     922        { "c:\\foo", "c:\\foo\\bar.txt", "c:\\test", "c:\\test\\bar.txt", VINF_SUCCESS },
     923        { "c:\\foo", "c:\\foo\\baz\\bar.txt", "c:\\test", "c:\\test\\baz\\bar.txt", VINF_SUCCESS }
     924        /* UNIX-like paths. */
     925        /* Mixed paths*/
     926        /** @todo */
     927    };
     928
     929    int iTest = 0;
     930    for (iTest; iTest < RT_ELEMENTS(aTests); iTest++)
     931    {
     932        RTPrintf("=> Test %d\n", iTest);
     933        RTPrintf("\tSourceRoot=%s, Source=%s, Dest=%s\n",
     934                 aTests[iTest].pszSourceRoot, aTests[iTest].pszSource, aTests[iTest].pszDest);
     935
     936        char *pszTranslated = NULL;
     937        int iResult =  ctrlCopyTranslatePath(aTests[iTest].pszSourceRoot, aTests[iTest].pszSource,
     938                                             aTests[iTest].pszDest, &pszTranslated);
     939        if (iResult != aTests[iTest].iResult)
     940        {
     941            RTPrintf("\tReturned %Rrc, expected %Rrc\n",
     942                     iResult, aTests[iTest].iResult);
     943        }
     944        else if (   pszTranslated
     945                 && strcmp(pszTranslated, aTests[iTest].pszTranslated))
     946        {
     947            RTPrintf("\tReturned translated path %s, expected %s\n",
     948                     pszTranslated, aTests[iTest].pszTranslated);
     949        }
     950
     951        if (pszTranslated)
     952        {
     953            RTPrintf("\tTranslated=%s\n", pszTranslated);
     954            RTStrFree(pszTranslated);
     955        }
     956    }
     957}
    903958#endif
    904 
    905     return vrc;
    906 }
    907959
    908960static int ctrlCopyDirCreate(PCOPYCONTEXT pContext, const char *pszDir)
     
    11431195                        {
    11441196                            char *pszDestDir;
    1145                             rc = ctrlCopyTranslatePath(pContext, pszSource, szCurDir,
     1197                            rc = ctrlCopyTranslatePath(pszSource, szCurDir,
    11461198                                                       pszDest, &pszDestDir);
    11471199                            if (RT_SUCCESS(rc))
     
    11611213                            {
    11621214                                char *pszFileDest;
    1163                                 rc = ctrlCopyTranslatePath(pContext, pszSource, pszFileSource,
     1215                                rc = ctrlCopyTranslatePath(pszSource, pszFileSource,
    11641216                                                           pszDest, &pszFileDest);
    11651217                                if (RT_SUCCESS(rc))
     
    12161268    ULONG uDirHandle;
    12171269    HRESULT hr = pContext->pGuest->DirectoryOpen(Bstr(szCurDir).raw(), Bstr(pszFilter).raw(),
    1218                                                  fFlags,
     1270                                                 DirectoryOpenFlag_None /* No flags supported yet. */,
    12191271                                                 Bstr(pContext->pszUsername).raw(), Bstr(pContext->pszPassword).raw(),
    12201272                                                 &uDirHandle);
     
    12811333                        {
    12821334                            char *pszDestDir;
    1283                             rc = ctrlCopyTranslatePath(pContext, pszSource, szCurDir,
     1335                            rc = ctrlCopyTranslatePath(pszSource, szCurDir,
    12841336                                                       pszDest, &pszDestDir);
    12851337                            if (RT_SUCCESS(rc))
     
    12991351                            {
    13001352                                char *pszFileDest;
    1301                                 rc = ctrlCopyTranslatePath(pContext, pszSource, pszFileSource,
     1353                                rc = ctrlCopyTranslatePath(pszSource, pszFileSource,
    13021354                                                           pszDest, &pszFileDest);
    13031355                                if (RT_SUCCESS(rc))
     
    14131465     */
    14141466
     1467#ifdef DEBUG_andy
     1468    tstTranslatePath();
     1469    return VINF_SUCCESS;
     1470#endif
     1471
    14151472    static const RTGETOPTDEF s_aOptions[] =
    14161473    {
     
    15961653                    /* Single file. */
    15971654                    char *pszDestFile;
    1598                     vrc = ctrlCopyTranslatePath(pContext, pszSourceRoot, pszSource,
     1655                    vrc = ctrlCopyTranslatePath(pszSourceRoot, pszSource,
    15991656                                                Utf8Dest.c_str(), &pszDestFile);
    16001657                    if (RT_SUCCESS(vrc))
Note: See TracChangeset for help on using the changeset viewer.

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