VirtualBox

Changeset 74714 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Oct 9, 2018 11:50:22 AM (6 years ago)
Author:
vboxsync
Message:

DnD: Cleaned up DnDURIObject API / internal state handling.

Location:
trunk/src/VBox
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibDragAndDrop.cpp

    r74574 r74714  
    510510                                uint32_t fCreationMode = (fMode & RTFS_UNIX_MASK) | RTFS_UNIX_IRUSR | RTFS_UNIX_IWUSR;
    511511#endif
    512                                 rc = objFile.OpenEx(strPathAbs, DnDURIObject::Type_File, DnDURIObject::View_Target, fOpen, fCreationMode);
     512                                rc = objFile.OpenEx(strPathAbs, DnDURIObject::View_Target, fOpen, fCreationMode);
    513513                                if (RT_SUCCESS(rc))
    514514                                {
  • trunk/src/VBox/GuestHost/DragAndDrop/DnDURIList.cpp

    r74526 r74714  
    7070                {
    7171                    /** @todo Add a standard fOpen mode for this list. */
    72                     rc = pObjFile->Open(DnDURIObject::View_Source, RTFILE_O_OPEN | RTFILE_O_READ | RTFILE_O_DENY_WRITE, objInfo.Attr.fMode);
     72                    rc = pObjFile->Open(DnDURIObject::View_Source, RTFILE_O_OPEN | RTFILE_O_READ | RTFILE_O_DENY_WRITE);
    7373                }
     74                else /* Just query the information without opening the file. */
     75                    rc = pObjFile->QueryInfo(DnDURIObject::View_Source);
    7476
    7577                if (RT_SUCCESS(rc))
     
    9092            LogFlowFunc(("Directory '%s' -> '%s' (file mode 0x%x)\n", pcszSource, pcszTarget, objInfo.Attr.fMode));
    9193
    92             DnDURIObject *pObjDir = new DnDURIObject(DnDURIObject::Type_Directory, pcszSource, pcszTarget,
    93                                                      objInfo.Attr.fMode, 0 /* Size */);
     94            DnDURIObject *pObjDir = new DnDURIObject(DnDURIObject::Type_Directory, pcszSource, pcszTarget);
    9495            if (pObjDir)
    9596            {
  • trunk/src/VBox/GuestHost/DragAndDrop/DnDURIObject.cpp

    r74673 r74714  
    3737
    3838DnDURIObject::DnDURIObject(void)
    39     : m_Type(Type_Unknown)
     39    : m_enmType(Type_Unknown)
     40    , m_enmView(View_Unknown)
    4041    , m_fIsOpen(false)
    4142{
     
    4546DnDURIObject::DnDURIObject(Type enmType,
    4647                           const RTCString &strSrcPathAbs /* = 0 */,
    47                            const RTCString &strDstPathAbs /* = 0 */,
    48                            uint32_t fMode  /* = 0 */, uint64_t cbSize  /* = 0 */)
    49     : m_Type(enmType)
     48                           const RTCString &strDstPathAbs /* = 0 */)
     49    : m_enmType(enmType)
     50    , m_enmView(View_Unknown)
    5051    , m_strSrcPathAbs(strSrcPathAbs)
    5152    , m_strTgtPathAbs(strDstPathAbs)
     
    5354{
    5455    RT_ZERO(u);
    55 
    56     switch (m_Type)
    57     {
    58         case Type_File:
    59             u.File.fMode = fMode;
    60             u.File.cbSize = cbSize;
    61             break;
    62 
    63         default:
    64             break;
    65     }
    6656}
    6757
     
    8272        return;
    8373
    84     switch (m_Type)
     74    switch (m_enmType)
    8575    {
    8676        case Type_File:
     
    8878            RTFileClose(u.File.hFile);
    8979            u.File.hFile = NIL_RTFILE;
    90             u.File.fMode = 0;
     80            RT_ZERO(u.File.objInfo);
    9181            break;
    9282        }
    9383
    9484        case Type_Directory:
    95             break;
     85        {
     86            RTDirClose(u.Dir.hDir);
     87            u.Dir.hDir = NIL_RTDIR;
     88            RT_ZERO(u.Dir.objInfo);
     89            break;
     90        }
    9691
    9792        default:
     
    112107
    113108/**
     109 * Returns the directory / file mode of the object.
     110 *
     111 * @return  File / directory mode.
     112 */
     113RTFMODE DnDURIObject::GetMode(void) const
     114{
     115    switch (m_enmType)
     116    {
     117        case Type_File:
     118            return u.File.objInfo.Attr.fMode;
     119
     120        case Type_Directory:
     121            return u.Dir.objInfo.Attr.fMode;
     122
     123        default:
     124            break;
     125    }
     126
     127    AssertFailed();
     128    return 0;
     129}
     130
     131/**
     132 * Returns the bytes already processed (read / written).
     133 *
     134 * Note: Only applies if the object is of type DnDURIObject::Type_File.
     135 *
     136 * @return  Bytes already processed (read / written).
     137 */
     138uint64_t DnDURIObject::GetProcessed(void) const
     139{
     140    if (m_enmType == Type_File)
     141        return u.File.cbProcessed;
     142
     143    return 0;
     144}
     145
     146/**
     147 * Returns the file's logical size (in bytes).
     148 *
     149 * Note: Only applies if the object is of type DnDURIObject::Type_File.
     150 *
     151 * @return  The file's logical size (in bytes).
     152 */
     153uint64_t DnDURIObject::GetSize(void) const
     154{
     155    if (m_enmType == Type_File)
     156        return u.File.cbToProcess;
     157
     158    return 0;
     159}
     160
     161/**
    114162 * Returns whether the processing of the object is complete or not.
    115163 * For file objects this means that all bytes have been processed.
     
    121169    bool fComplete;
    122170
    123     switch (m_Type)
     171    switch (m_enmType)
    124172    {
    125173        case Type_File:
    126             Assert(u.File.cbProcessed <= u.File.cbSize);
    127             fComplete = u.File.cbProcessed == u.File.cbSize;
     174            Assert(u.File.cbProcessed <= u.File.cbToProcess);
     175            fComplete = u.File.cbProcessed == u.File.cbToProcess;
    128176            break;
    129177
     
    154202 * @param   enmView             View to use for opening the object.
    155203 * @param   fOpen               File open flags to use.
    156  * @param   fMode
    157  *
    158  * @remark
    159  */
    160 int DnDURIObject::Open(View enmView, uint64_t fOpen /* = 0 */, uint32_t fMode /* = 0 */)
     204 * @param   fMode               File mode to use.
     205 */
     206int DnDURIObject::Open(View enmView, uint64_t fOpen /* = 0 */, RTFMODE fMode /* = 0 */)
    161207{
    162208    return OpenEx(  enmView == View_Source
    163209                  ? m_strSrcPathAbs : m_strTgtPathAbs
    164                   , m_Type, enmView, fOpen, fMode, 0 /* fFlags */);
     210                  , enmView, fOpen, fMode, DNDURIOBJECT_FLAGS_NONE);
    165211}
    166212
     
    170216 * @return  IPRT status code.
    171217 * @param   strPathAbs          Absolute path of the object (file / directory / ...).
    172  * @param   enmType             Type of the object.
    173218 * @param   enmView             View of the object.
    174219 * @param   fOpen               Open mode to use; only valid for file objects.
     
    176221 * @param   fFlags              Additional DnD URI object flags.
    177222 */
    178 int DnDURIObject::OpenEx(const RTCString &strPathAbs, Type enmType, View enmView,
    179                          uint64_t fOpen /* = 0 */, uint32_t fMode /* = 0 */, DNDURIOBJECTFLAGS fFlags /* = DNDURIOBJECT_FLAGS_NONE */)
     223int DnDURIObject::OpenEx(const RTCString &strPathAbs, View enmView,
     224                         uint64_t fOpen /* = 0 */, RTFMODE fMode /* = 0 */, DNDURIOBJECTFLAGS fFlags /* = DNDURIOBJECT_FLAGS_NONE */)
    180225{
    181226    AssertReturn(!(fFlags & ~DNDURIOBJECT_FLAGS_VALID_MASK), VERR_INVALID_FLAGS);
    182227    RT_NOREF1(fFlags);
    183228
     229    if (m_fIsOpen)
     230        return VINF_SUCCESS;
     231
    184232    int rc = VINF_SUCCESS;
    185233
     
    202250        && fOpen) /* Opening mode specified? */
    203251    {
    204         LogFlowThisFunc(("strPath=%s, enmType=%RU32, enmView=%RU32, fOpen=0x%x, fMode=0x%x, fFlags=0x%x\n",
    205                          strPathAbs.c_str(), enmType, enmView, fOpen, fMode, fFlags));
    206         switch (enmType)
     252        LogFlowThisFunc(("strPath=%s, enmView=%RU32, fOpen=0x%x, fMode=0x%x, fFlags=0x%x\n",
     253                         strPathAbs.c_str(), enmView, fOpen, fMode, fFlags));
     254        switch (m_enmType)
    207255        {
    208256            case Type_File:
    209257            {
    210                 if (!m_fIsOpen)
     258                /*
     259                 * Open files on the source with RTFILE_O_DENY_WRITE to prevent races
     260                 * where the OS writes to the file while the destination side transfers
     261                 * it over.
     262                 */
     263                LogFlowThisFunc(("Opening ...\n"));
     264                rc = RTFileOpen(&u.File.hFile, strPathAbs.c_str(), fOpen);
     265                if (RT_SUCCESS(rc))
    211266                {
    212                     /*
    213                      * Open files on the source with RTFILE_O_DENY_WRITE to prevent races
    214                      * where the OS writes to the file while the destination side transfers
    215                      * it over.
    216                      */
    217                     LogFlowThisFunc(("Opening ...\n"));
    218                     rc = RTFileOpen(&u.File.hFile, strPathAbs.c_str(), fOpen);
    219                     if (RT_SUCCESS(rc))
    220                         rc = RTFileGetSize(u.File.hFile, &u.File.cbSize);
    221 
    222                     if (RT_SUCCESS(rc))
     267                    if (   (fOpen & RTFILE_O_WRITE) /* Only set the file mode on write. */
     268                        &&  fMode                   /* Some file mode to set specified? */)
    223269                    {
    224                         if (   (fOpen & RTFILE_O_WRITE) /* Only set the file mode on write. */
    225                             &&  fMode                   /* Some file mode to set specified? */)
    226                         {
    227                             rc = RTFileSetMode(u.File.hFile, fMode);
    228                             if (RT_SUCCESS(rc))
    229                                 u.File.fMode = fMode;
    230                         }
    231                         else if (fOpen & RTFILE_O_READ)
    232                         {
    233 #if 0 /** @todo Enable this as soon as RTFileGetMode is implemented. */
    234                             rc = RTFileGetMode(u.m_hFile, &m_fMode);
    235 #else
    236                             RTFSOBJINFO ObjInfo;
    237                             rc = RTFileQueryInfo(u.File.hFile, &ObjInfo, RTFSOBJATTRADD_NOTHING);
    238                             if (RT_SUCCESS(rc))
    239                                 u.File.fMode = ObjInfo.Attr.fMode;
    240 #endif
    241                         }
     270                        rc = RTFileSetMode(u.File.hFile, fMode);
    242271                    }
    243 
    244                     if (RT_SUCCESS(rc))
     272                    else if (fOpen & RTFILE_O_READ)
    245273                    {
    246                         LogFlowThisFunc(("cbSize=%RU64, fMode=0x%x\n", u.File.cbSize, u.File.fMode));
    247                         u.File.cbProcessed = 0;
     274                        rc = queryInfoInternal(enmView);
    248275                    }
    249276                }
    250                 else
    251                     rc = VINF_SUCCESS;
     277
     278                if (RT_SUCCESS(rc))
     279                {
     280                    LogFlowThisFunc(("File cbObject=%RU64, fMode=0x%x\n",
     281                                     u.File.objInfo.cbObject, u.File.objInfo.Attr.fMode));
     282                    u.File.cbToProcess = u.File.objInfo.cbObject;
     283                    u.File.cbProcessed = 0;
     284                }
    252285
    253286                break;
     
    255288
    256289            case Type_Directory:
    257                 rc = VINF_SUCCESS;
     290            {
     291                rc = RTDirOpen(&u.Dir.hDir, strPathAbs.c_str());
     292                if (RT_SUCCESS(rc))
     293                    rc = queryInfoInternal(enmView);
    258294                break;
     295            }
    259296
    260297            default:
     
    266303    if (RT_SUCCESS(rc))
    267304    {
    268         m_Type  = enmType;
     305        m_enmView = enmView;
    269306        m_fIsOpen = true;
    270307    }
     
    272309    LogFlowFuncLeaveRC(rc);
    273310    return rc;
     311}
     312
     313/**
     314 * Queries information about the object using a specific view, internal version.
     315 *
     316 * @return  IPRT status code.
     317 * @param   enmView             View to use for querying information.
     318 */
     319int DnDURIObject::queryInfoInternal(View enmView)
     320{
     321    RT_NOREF(enmView);
     322
     323    int rc;
     324
     325    switch (m_enmType)
     326    {
     327        case Type_File:
     328            rc = RTFileQueryInfo(u.File.hFile, &u.File.objInfo, RTFSOBJATTRADD_NOTHING);
     329            break;
     330
     331        case Type_Directory:
     332            rc = RTDirQueryInfo(u.Dir.hDir, &u.Dir.objInfo, RTFSOBJATTRADD_NOTHING);
     333            break;
     334
     335        default:
     336            rc = VERR_NOT_IMPLEMENTED;
     337            break;
     338    }
     339
     340    return rc;
     341}
     342
     343/**
     344 * Queries information about the object using a specific view.
     345 *
     346 * @return  IPRT status code.
     347 * @param   enmView             View to use for querying information.
     348 */
     349int DnDURIObject::QueryInfo(View enmView)
     350{
     351    return queryInfoInternal(enmView);
    274352}
    275353
     
    354432    /* pcbRead is optional. */
    355433
     434    AssertMsgReturn(m_fIsOpen, ("Object not in open state\n"), VERR_INVALID_STATE);
     435    AssertMsgReturn(m_enmView == View_Source, ("Cannot write to an object which is not in target view\n"),
     436                    VERR_INVALID_STATE);
     437
    356438    size_t cbRead = 0;
    357439
    358440    int rc;
    359     switch (m_Type)
     441    switch (m_enmType)
    360442    {
    361443        case Type_File:
    362444        {
    363             rc = OpenEx(m_strSrcPathAbs, Type_File, View_Source,
    364                         /* Use some sensible defaults. */
    365                         RTFILE_O_OPEN | RTFILE_O_READ | RTFILE_O_DENY_WRITE, 0 /* fFlags */);
     445            rc = RTFileRead(u.File.hFile, pvBuf, cbBuf, &cbRead);
    366446            if (RT_SUCCESS(rc))
    367447            {
    368                 rc = RTFileRead(u.File.hFile, pvBuf, cbBuf, &cbRead);
    369                 if (RT_SUCCESS(rc))
     448                u.File.cbProcessed += cbRead;
     449                Assert(u.File.cbProcessed <= u.File.cbToProcess);
     450
     451                /* End of file reached or error occurred? */
     452                if (   u.File.cbToProcess
     453                    && u.File.cbProcessed == u.File.cbToProcess)
    370454                {
    371                     u.File.cbProcessed += cbRead;
    372                     Assert(u.File.cbProcessed <= u.File.cbSize);
    373 
    374                     /* End of file reached or error occurred? */
    375                     if (   u.File.cbSize
    376                         && u.File.cbProcessed == u.File.cbSize)
    377                     {
    378                         rc = VINF_EOF;
    379                     }
     455                    rc = VINF_EOF;
    380456                }
    381457            }
    382 
    383458            break;
    384459        }
     
    414489    Close();
    415490
    416     m_Type          = Type_Unknown;
     491    m_enmType       = Type_Unknown;
     492    m_enmView       = View_Unknown;
    417493    m_strSrcPathAbs = "";
    418494    m_strTgtPathAbs = "";
    419495
    420496    RT_ZERO(u);
     497}
     498
     499/**
     500 * Sets the bytes to process by the object.
     501 *
     502 * Note: Only applies if the object is of type DnDURIObject::Type_File.
     503 *
     504 * @return  IPRT return code.
     505 * @param   cbSize          Size (in bytes) to process.
     506 */
     507int DnDURIObject::SetSize(uint64_t cbSize)
     508{
     509    AssertReturn(m_enmType == Type_File, VERR_INVALID_PARAMETER);
     510
     511    /** @todo Implement sparse file support here. */
     512
     513    u.File.cbToProcess = cbSize;
     514    return VINF_SUCCESS;
    421515}
    422516
     
    435529    /* pcbWritten is optional. */
    436530
     531    AssertMsgReturn(m_fIsOpen, ("Object not in open state\n"), VERR_INVALID_STATE);
     532    AssertMsgReturn(m_enmView == View_Target, ("Cannot write to an object which is not in target view\n"),
     533                    VERR_INVALID_STATE);
     534
    437535    size_t cbWritten = 0;
    438536
    439537    int rc;
    440     switch (m_Type)
     538    switch (m_enmType)
    441539    {
    442540        case Type_File:
    443541        {
    444             rc = OpenEx(m_strTgtPathAbs, Type_File, View_Target,
    445                         /* Use some sensible defaults. */
    446                         RTFILE_O_OPEN_CREATE | RTFILE_O_DENY_WRITE | RTFILE_O_WRITE, 0 /* fFlags */);
     542            rc = RTFileWrite(u.File.hFile, pvBuf, cbBuf, &cbWritten);
    447543            if (RT_SUCCESS(rc))
    448             {
    449                 rc = RTFileWrite(u.File.hFile, pvBuf, cbBuf, &cbWritten);
    450                 if (RT_SUCCESS(rc))
    451                     u.File.cbProcessed += cbWritten;
    452             }
     544                u.File.cbProcessed += cbWritten;
    453545            break;
    454546        }
  • trunk/src/VBox/Main/include/GuestDnDPrivate.h

    r74526 r74714  
    390390public:
    391391
    392     int createIntermediate(DnDURIObject::Type enmType = DnDURIObject::Type_Unknown)
     392    int createIntermediate(DnDURIObject::Type enmType)
    393393    {
    394394        reset();
  • trunk/src/VBox/Main/src-client/GuestDnDSourceImpl.cpp

    r74574 r74714  
    798798             * Create new intermediate object to work with.
    799799             */
    800             rc = objCtx.createIntermediate();
     800            rc = objCtx.createIntermediate(DnDURIObject::Type_File);
    801801        }
    802802
     
    824824            }
    825825
    826             LogRel2(("DnD: Absolute file path on the host now is '%s'\n", pszPathAbs));
     826            LogRel2(("DnD: Absolute file path for guest file on the host is now '%s'\n", pszPathAbs));
    827827
    828828            /** @todo Add sparse file support based on fFlags? (Use Open(..., fFlags | SPARSE). */
    829             rc = pObj->OpenEx(pszPathAbs, DnDURIObject::Type_File, DnDURIObject::View_Target,
     829            rc = pObj->OpenEx(pszPathAbs, DnDURIObject::View_Target,
    830830                              RTFILE_O_CREATE_REPLACE | RTFILE_O_WRITE | RTFILE_O_DENY_WRITE,
    831831                              (fMode & RTFS_UNIX_MASK) | RTFS_UNIX_IRUSR | RTFS_UNIX_IWUSR);
     
    836836                AssertRC(rc2);
    837837            }
     838            else
     839                LogRel(("DnD: Error opening/creating guest file '%s' on host, rc=%Rrc\n", pszPathAbs, rc));
    838840        }
    839841
     
    854856        }
    855857
    856         if (RT_FAILURE(rc))
    857         {
    858             LogRel2(("DnD: Error opening/creating guest file '%s' on host, rc=%Rrc\n",
    859                      pObj->GetDestPathAbs().c_str(), rc));
    860             break;
    861         }
    862 
    863858    } while (0);
     859
     860    if (RT_FAILURE(rc))
     861        LogRel(("DnD: Error receiving guest file header, rc=%Rrc\n", rc));
    864862
    865863    LogFlowFuncLeaveRC(rc);
     
    923921                rc = updateProgress(&pCtx->mData, pCtx->mpResp, cbWritten);
    924922        }
    925         else /* Something went wrong; close the object. */
    926             pObj->Close();
     923        else
     924            LogRel(("DnD: Error writing guest file data for '%s', rc=%Rrc\n", pObj->GetDestPathAbs().c_str(), rc));
    927925
    928926        if (RT_SUCCESS(rc))
     
    931929            {
    932930                /** @todo Sanitize path. */
    933                 LogRel2(("DnD: File transfer to host complete: %s\n", pObj->GetDestPathAbs().c_str()));
     931                LogRel2(("DnD: Transferring guest file '%s' to host complete\n", pObj->GetDestPathAbs().c_str()));
    934932                pCtx->mURI.processObject(*pObj);
    935933                objCtx.reset();
    936934            }
    937935        }
    938         else
    939         {
    940             /** @todo What to do when the host's disk is full? */
    941             LogRel(("DnD: Error writing guest file to host to '%s': %Rrc\n", pObj->GetDestPathAbs().c_str(), rc));
    942         }
    943936
    944937    } while (0);
     938
     939    if (RT_FAILURE(rc))
     940        LogRel(("DnD: Error receiving guest file data, rc=%Rrc\n", rc));
    945941
    946942    LogFlowFuncLeaveRC(rc);
  • trunk/src/VBox/Main/src-client/GuestDnDTargetImpl.cpp

    r74574 r74714  
    910910        return VERR_BUFFER_OVERFLOW;
    911911
    912     LogRel2(("DnD: Transferring host directory to guest: %s\n", strPath.c_str()));
     912    LogRel2(("DnD: Transferring host directory '%s' to guest\n", strPath.c_str()));
    913913
    914914    pMsg->setType(HOST_DND_HG_SND_DIR);
     
    943943    if (!pObj->IsOpen())
    944944    {
    945         LogRel2(("DnD: Opening host file for transferring to guest: %s\n", strPathSrc.c_str()));
    946         rc = pObj->OpenEx(strPathSrc, DnDURIObject::Type_File, DnDURIObject::View_Source,
    947                           RTFILE_O_OPEN | RTFILE_O_READ | RTFILE_O_DENY_WRITE, 0 /* fFlags */);
     945        LogRel2(("DnD: Opening host file '%s' for transferring to guest\n", strPathSrc.c_str()));
     946        rc = pObj->OpenEx(strPathSrc, DnDURIObject::View_Source,
     947                          RTFILE_O_OPEN | RTFILE_O_READ | RTFILE_O_DENY_WRITE);
    948948        if (RT_FAILURE(rc))
    949             LogRel(("DnD: Error opening host file '%s', rc=%Rrc\n", strPathSrc.c_str(), rc));
     949            LogRel(("DnD: Opening host file '%s' failed, rc=%Rrc\n", strPathSrc.c_str(), rc));
    950950    }
    951951
     
    998998    }
    999999
     1000    if (RT_FAILURE(rc))
     1001        LogRel(("DnD: Sending host file to guest failed, rc=%Rrc\n", rc));
     1002
    10001003    LogFlowFuncLeaveRC(rc);
    10011004    return rc;
     
    10631066        if (pObj->IsComplete()) /* Done reading? */
    10641067        {
    1065             LogRel2(("DnD: File transfer to guest complete: %s\n", pObj->GetSourcePathAbs().c_str()));
     1068            LogRel2(("DnD: Transferring file '%s' to guest complete\n", pObj->GetSourcePathAbs().c_str()));
    10661069            LogFlowFunc(("File '%s' complete\n", pObj->GetSourcePathAbs().c_str()));
    10671070
     
    10711074        }
    10721075    }
     1076
     1077    if (RT_FAILURE(rc))
     1078        LogRel(("DnD: Reading from host file '%s' failed, rc=%Rrc\n", pObj->GetSourcePathAbs().c_str(), rc));
    10731079
    10741080    LogFlowFuncLeaveRC(rc);
     
    14651471    AssertPtr(pCurObj);
    14661472
    1467     uint32_t fMode = pCurObj->GetMode();
    1468     LogRel3(("DnD: Processing: srcPath=%s, dstPath=%s, fMode=0x%x, cbSize=%RU32, fIsDir=%RTbool, fIsFile=%RTbool\n",
     1473    DnDURIObject::Type enmType = pCurObj->GetType();
     1474    LogRel3(("DnD: Processing: srcPath=%s, dstPath=%s, enmType=%RU32, cbSize=%RU32\n",
    14691475             pCurObj->GetSourcePathAbs().c_str(), pCurObj->GetDestPathAbs().c_str(),
    1470              fMode, pCurObj->GetSize(),
    1471              RTFS_IS_DIRECTORY(fMode), RTFS_IS_FILE(fMode)));
    1472 
    1473     if (RTFS_IS_DIRECTORY(fMode))
     1476             enmType, pCurObj->GetSize()));
     1477
     1478    if (enmType == DnDURIObject::Type_Directory)
    14741479    {
    14751480        rc = i_sendDirectory(pCtx, &objCtx, pMsg);
    14761481    }
    1477     else if (RTFS_IS_FILE(fMode))
     1482    else if (DnDURIObject::Type_File)
    14781483    {
    14791484        rc = i_sendFile(pCtx, &objCtx, pMsg);
     
    14811486    else
    14821487    {
    1483         AssertMsgFailed(("fMode=0x%x is not supported for srcPath=%s, dstPath=%s\n",
    1484                          fMode, pCurObj->GetSourcePathAbs().c_str(), pCurObj->GetDestPathAbs().c_str()));
     1488        AssertMsgFailed(("enmType=%RU32 is not supported for srcPath=%s, dstPath=%s\n",
     1489                         enmType, pCurObj->GetSourcePathAbs().c_str(), pCurObj->GetDestPathAbs().c_str()));
    14851490        rc = VERR_NOT_SUPPORTED;
    14861491    }
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