VirtualBox

忽略:
時間撮記:
2016-2-26 下午03:38:01 (9 年 以前)
作者:
vboxsync
訊息:

DnD/DnDURIList.cpp: Use exceptions.

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/GuestHost/DragAndDrop/DnDURIList.cpp

    r58329 r59852  
    55
    66/*
    7  * Copyright (C) 2014-2015 Oracle Corporation
     7 * Copyright (C) 2014-2016 Oracle Corporation
    88 *
    99 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    5959    if (RT_SUCCESS(rc))
    6060    {
    61         if (RTFS_IS_FILE(objInfo.Attr.fMode))
    62         {
    63             LogFlowFunc(("File '%s' -> '%s' (%RU64 bytes, file mode 0x%x)\n",
    64                          pcszSource, pcszTarget, (uint64_t)objInfo.cbObject, objInfo.Attr.fMode));
    65 
    66             DnDURIObject *pObjFile = new DnDURIObject(DnDURIObject::File, pcszSource, pcszTarget);
    67             if (pObjFile)
    68             {
     61        try
     62        {
     63            DnDURIObject *pObj = NULL;
     64
     65            if (RTFS_IS_FILE(objInfo.Attr.fMode))
     66            {
     67                LogFlowFunc(("File '%s' -> '%s' (%RU64 bytes, file mode 0x%x)\n",
     68                             pcszSource, pcszTarget, (uint64_t)objInfo.cbObject, objInfo.Attr.fMode));
     69
     70                pObj = new DnDURIObject(DnDURIObject::File, pcszSource, pcszTarget);
     71
    6972                if (fFlags & DNDURILIST_FLAGS_KEEP_OPEN) /* Shall we keep the file open while being added to this list? */
    7073                {
    7174                    /** @todo Add a standard fOpen mode for this list. */
    72                     rc = pObjFile->Open(DnDURIObject::Source, RTFILE_O_OPEN | RTFILE_O_READ | RTFILE_O_DENY_WRITE, objInfo.Attr.fMode);
     75                    rc = pObj->Open(DnDURIObject::Source, RTFILE_O_OPEN | RTFILE_O_READ | RTFILE_O_DENY_WRITE,
     76                                    objInfo.Attr.fMode);
    7377                }
    7478
    7579                if (RT_SUCCESS(rc))
    7680                {
    77                     m_lstTree.append(pObjFile);
     81                    m_lstTree.append(pObj);
    7882
    7983                    m_cTotal++;
    80                     m_cbTotal += pObjFile->GetSize();
     84                    m_cbTotal += pObj->GetSize();
    8185                }
    82                 else
    83                     delete pObjFile;
    84             }
    85             else
    86                 rc = VERR_NO_MEMORY;
    87         }
    88         else if (RTFS_IS_DIRECTORY(objInfo.Attr.fMode))
    89         {
    90             LogFlowFunc(("Directory '%s' -> '%s' (file mode 0x%x)\n", pcszSource, pcszTarget, objInfo.Attr.fMode));
    91 
    92             DnDURIObject *pObjDir = new DnDURIObject(DnDURIObject::Directory, pcszSource, pcszTarget,
    93                                                      objInfo.Attr.fMode, 0 /* Size */);
    94             if (pObjDir)
    95             {
    96                 m_lstTree.append(pObjDir);
     86            }
     87            else if (RTFS_IS_DIRECTORY(objInfo.Attr.fMode))
     88            {
     89                LogFlowFunc(("Directory '%s' -> '%s' (file mode 0x%x)\n", pcszSource, pcszTarget, objInfo.Attr.fMode));
     90
     91                pObj = new DnDURIObject(DnDURIObject::Directory, pcszSource, pcszTarget, objInfo.Attr.fMode, 0 /* Size */);
     92                m_lstTree.append(pObj);
    9793
    9894                /** @todo Add DNDURILIST_FLAGS_KEEP_OPEN handling? */
    9995                m_cTotal++;
    10096            }
     97            /* Note: Symlinks already should have been resolved at this point. */
    10198            else
    102                 rc = VERR_NO_MEMORY;
    103         }
    104         /* Note: Symlinks already should have been resolved at this point. */
    105         else
    106             rc = VERR_NOT_SUPPORTED;
     99                rc = VERR_NOT_SUPPORTED;
     100
     101            if (RT_FAILURE(rc))
     102            {
     103                if (pObj)
     104                    delete pObj;
     105            }
     106        }
     107        catch (std::bad_alloc &)
     108        {
     109            rc = VERR_NO_MEMORY;
     110        }
    107111    }
    108112
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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