VirtualBox

Changeset 52934 in vbox for trunk/src/VBox/Main/src-server


Ignore:
Timestamp:
Oct 2, 2014 1:53:30 PM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
96372
Message:

Main: safearray cleanup, removed unnecessary SafeArray<->vector conversions

Location:
trunk/src/VBox/Main/src-server
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/src-server/HostDnsService.cpp

    r52897 r52934  
    55
    66/*
    7  * Copyright (C) 2013 Oracle Corporation
     7 * Copyright (C) 2013-2014 Oracle Corporation
    88 *
    99 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    6767
    6868inline static void detachVectorOfWString(const std::vector<std::wstring>& v,
    69                                         ComSafeArrayOut(BSTR, aBstrArray))
    70 {
    71     com::SafeArray<BSTR> aBstr(v.size());
    72 
    73     std::vector<std::wstring>::const_iterator it;
    74 
    75     int i = 0;
    76     it = v.begin();
    77     for (; it != v.end(); ++it, ++i)
    78         Utf8Str(it->c_str()).cloneTo(&aBstr[i]);
    79 
    80     aBstr.detachTo(ComSafeArrayOutArg(aBstrArray));
     69                                         std::vector<com::Utf8Str> &aArray)
     70{
     71    aArray.resize(v.size());
     72    size_t i = 0;
     73    for (std::vector<std::wstring>::const_iterator it = v.begin(); it != v.end(); ++it, ++i)
     74        aArray[i] = Utf8Str(it->c_str());
    8175}
    8276
     
    265259}
    266260
    267 HRESULT HostDnsMonitorProxy::GetNameServers(ComSafeArrayOut(BSTR, aNameServers))
     261HRESULT HostDnsMonitorProxy::GetNameServers(std::vector<com::Utf8Str> &aNameServers)
    268262{
    269263    AssertReturn(m && m->info, E_FAIL);
     
    276270    dumpHostDnsStrVector("Name Server", m->info->servers);
    277271
    278     detachVectorOfWString(m->info->servers, ComSafeArrayOutArg(aNameServers));
     272    detachVectorOfWString(m->info->servers, aNameServers);
    279273
    280274    return S_OK;
    281275}
    282276
    283 HRESULT HostDnsMonitorProxy::GetDomainName(BSTR *aDomainName)
     277HRESULT HostDnsMonitorProxy::GetDomainName(com::Utf8Str *pDomainName)
    284278{
    285279    AssertReturn(m && m->info, E_FAIL);
     
    291285    LogRel(("HostDnsMonitorProxy::GetDomainName: %s\n", m->info->domain.c_str()));
    292286
    293     Utf8Str(m->info->domain.c_str()).cloneTo(aDomainName);
     287    *pDomainName = m->info->domain.c_str();
    294288
    295289    return S_OK;
    296290}
    297291
    298 HRESULT HostDnsMonitorProxy::GetSearchStrings(ComSafeArrayOut(BSTR, aSearchStrings))
     292HRESULT HostDnsMonitorProxy::GetSearchStrings(std::vector<com::Utf8Str> &aSearchStrings)
    299293{
    300294    AssertReturn(m && m->info, E_FAIL);
     
    307301    dumpHostDnsStrVector("Search String", m->info->searchList);
    308302
    309     detachVectorOfWString(m->info->searchList, ComSafeArrayOutArg(aSearchStrings));
     303    detachVectorOfWString(m->info->searchList, aSearchStrings);
    310304
    311305    return S_OK;
  • trunk/src/VBox/Main/src-server/HostDnsService.h

    r52897 r52934  
    112112    void notify() const;
    113113
    114     HRESULT GetNameServers(ComSafeArrayOut(BSTR, aNameServers));
    115     HRESULT GetDomainName(BSTR *aDomainName);
    116     HRESULT GetSearchStrings(ComSafeArrayOut(BSTR, aSearchStrings));
     114    HRESULT GetNameServers(std::vector<com::Utf8Str> &aNameServers);
     115    HRESULT GetDomainName(com::Utf8Str *pDomainName);
     116    HRESULT GetSearchStrings(std::vector<com::Utf8Str> &aSearchStrings);
    117117
    118118    bool operator==(PCHostDnsMonitorProxy&);
  • trunk/src/VBox/Main/src-server/HostImpl.cpp

    r52170 r52934  
    776776#  endif /* RT_OS_LINUX */
    777777
    778     SafeIfaceArray<IHostNetworkInterface> networkInterfaces(list);
    779     networkInterfaces.detachTo(ComSafeArrayOutArg(aNetworkInterfaces));
     778    aNetworkInterfaces.resize(list.size());
     779    size_t i = 0;
     780    for (std::list<ComObjPtr<HostNetworkInterface> >::const_iterator it = list.begin(); it != list.end(); ++it, ++i)
     781        aNetworkInterfaces[i] = *it;
    780782
    781783    return S_OK;
     
    796798        return rc;
    797799
    798     SafeIfaceArray<IHostUSBDevice> resultArr;
    799     rc = m->pUSBProxyService->getDeviceCollection(ComSafeArrayAsOutParam(resultArr));
    800     if (FAILED(rc))
    801         return rc;
    802 
    803     aUSBDevices.resize(resultArr.size());
    804     for (size_t i = 0; i < resultArr.size(); ++i)
    805     {
    806          ComPtr<IHostUSBDevice> iHu = resultArr[i];
    807          iHu.queryInterfaceTo(aUSBDevices[i].asOutParam());
    808     }
    809 
    810     return rc;
     800    return m->pUSBProxyService->getDeviceCollection(aUSBDevices);
    811801#else
    812802    /* Note: The GUI depends on this method returning E_NOTIMPL with no
     
    827817{
    828818    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
    829 
    830     com::SafeArray<BSTR> resultArr;
    831     HRESULT rc = m->hostDnsMonitorProxy.GetNameServers(ComSafeArrayAsOutParam(resultArr));
    832     if (FAILED(rc))
    833         return rc;
    834 
    835     aNameServers.resize(resultArr.size());
    836     for (size_t i = 0; i < resultArr.size(); ++i)
    837         aNameServers[i] = com::Utf8Str(resultArr[i]);
    838 
    839     return S_OK;
     819    return m->hostDnsMonitorProxy.GetNameServers(aNameServers);
    840820}
    841821
     
    848828    /* XXX: note here should be synchronization with thread polling state
    849829     * changes in name resoving system on host */
    850     Bstr tmpName;
    851     HRESULT rc = m->hostDnsMonitorProxy.GetDomainName(tmpName.asOutParam());
    852     if (FAILED(rc))
    853         return rc;
    854 
    855     aDomainName = com::Utf8Str(tmpName);
    856 
    857     return S_OK;
     830    return m->hostDnsMonitorProxy.GetDomainName(&aDomainName);
    858831}
    859832
     
    865838{
    866839    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
    867 
    868     com::SafeArray<BSTR> resultArr;
    869     HRESULT rc = m->hostDnsMonitorProxy.GetSearchStrings(ComSafeArrayAsOutParam(resultArr));
    870     if (FAILED(rc))
    871         return rc;
    872 
    873     aSearchStrings.resize(resultArr.size());
    874     for (size_t i = 0; i < resultArr.size(); ++i)
    875         aSearchStrings[i] = com::Utf8Str(resultArr[i]);
    876 
    877     return S_OK;
     840    return m->hostDnsMonitorProxy.GetSearchStrings(aSearchStrings);
    878841}
    879842
  • trunk/src/VBox/Main/src-server/MachineImpl.cpp

    r52933 r52934  
    16591659HRESULT Machine::setVideoCaptureScreens(const std::vector<BOOL> &aVideoCaptureScreens)
    16601660{
    1661     SafeArray<BOOL> screens(aVideoCaptureScreens);
    1662     AssertReturn(screens.size() <= RT_ELEMENTS(mHWData->maVideoCaptureScreens), E_INVALIDARG);
     1661    AssertReturn(aVideoCaptureScreens.size() <= RT_ELEMENTS(mHWData->maVideoCaptureScreens), E_INVALIDARG);
    16631662    bool fChanged = false;
    16641663
    16651664    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
    16661665
    1667     for (unsigned i = 0; i < screens.size(); ++i)
    1668     {
    1669         if (mHWData->maVideoCaptureScreens[i] != RT_BOOL(screens[i]))
    1670         {
    1671             mHWData->maVideoCaptureScreens[i] = RT_BOOL(screens[i]);
     1666    for (unsigned i = 0; i < aVideoCaptureScreens.size(); ++i)
     1667    {
     1668        if (mHWData->maVideoCaptureScreens[i] != RT_BOOL(aVideoCaptureScreens[i]))
     1669        {
     1670            mHWData->maVideoCaptureScreens[i] = RT_BOOL(aVideoCaptureScreens[i]);
    16721671            fChanged = true;
    16731672        }
     
    48234822    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
    48244823
    4825     com::SafeArray<BSTR> saKeys(mData->pMachineConfigFile->mapExtraDataItems.size());
    48264824    aKeys.resize(mData->pMachineConfigFile->mapExtraDataItems.size());
    48274825    size_t i = 0;
     
    63316329    *aHeight = u32Height;
    63326330
    6333     com::SafeArray<BYTE> bitmap(cbData);
     6331    aData.resize(cbData);
    63346332    /* Convert pixels to format expected by the API caller. */
    63356333    if (aBGR)
     
    63386336        for (unsigned i = 0; i < cbData; i += 4)
    63396337        {
    6340             bitmap[i]     = pu8Data[i];
    6341             bitmap[i + 1] = pu8Data[i + 1];
    6342             bitmap[i + 2] = pu8Data[i + 2];
    6343             bitmap[i + 3] = 0xff;
     6338            aData[i]     = pu8Data[i];
     6339            aData[i + 1] = pu8Data[i + 1];
     6340            aData[i + 2] = pu8Data[i + 2];
     6341            aData[i + 3] = 0xff;
    63446342        }
    63456343    }
     
    63496347        for (unsigned i = 0; i < cbData; i += 4)
    63506348        {
    6351             bitmap[i]     = pu8Data[i + 2];
    6352             bitmap[i + 1] = pu8Data[i + 1];
    6353             bitmap[i + 2] = pu8Data[i];
    6354             bitmap[i + 3] = 0xff;
    6355         }
    6356     }
    6357     aData.resize(bitmap.size());
    6358     for (size_t i = 0; i < bitmap.size(); ++i)
    6359         aData[i] = bitmap[i];
     6349            aData[i]     = pu8Data[i + 2];
     6350            aData[i + 1] = pu8Data[i + 1];
     6351            aData[i + 2] = pu8Data[i];
     6352            aData[i + 3] = 0xff;
     6353        }
     6354    }
    63606355
    63616356    freeSavedDisplayScreenshot(pu8Data);
     
    63966391    if (RT_SUCCESS(vrc))
    63976392    {
    6398         com::SafeArray<BYTE> screenData(cbPNG);
    6399         screenData.initFrom(pu8PNG, cbPNG);
     6393        aData.resize(cbPNG);
     6394        if (cbPNG)
     6395            memcpy(&aData.front(), pu8PNG, cbPNG);
    64006396        if (pu8PNG)
    64016397            RTMemFree(pu8PNG);
    6402         aData.resize(screenData.size());
    6403         for (size_t i = 0; i < screenData.size(); ++i)
    6404             aData[i] = screenData[i];
    64056398    }
    64066399    else
     
    64686461    *aHeight = u32Height;
    64696462
    6470     com::SafeArray<BYTE> png(cbData);
    6471     png.initFrom(pu8Data, cbData);
    6472     aData.resize(png.size());
    6473     for (size_t i = 0; i < png.size(); ++i)
    6474         aData[i] = png[i];
     6463    aData.resize(cbData);
     6464    if (cbData)
     6465        memcpy(&aData.front(), pu8Data, cbData);
    64756466
    64766467    freeSavedDisplayScreenshot(pu8Data);
     
    65976588     * One byte expands to approx. 25 bytes of breathtaking XML. */
    65986589    size_t cbData = (size_t)RT_MIN(aSize, 32768);
    6599     com::SafeArray<BYTE> logData(cbData);
     6590    aData.resize(cbData);
    66006591
    66016592    RTFILE LogFile;
     
    66046595    if (RT_SUCCESS(vrc))
    66056596    {
    6606         vrc = RTFileReadAt(LogFile, aOffset, logData.raw(), cbData, &cbData);
     6597        vrc = RTFileReadAt(LogFile, aOffset, cbData? &aData.front(): NULL, cbData, &cbData);
    66076598        if (RT_SUCCESS(vrc))
    6608             logData.resize(cbData);
     6599            aData.resize(cbData);
    66096600        else
    66106601            rc = setError(VBOX_E_IPRT_ERROR,
     
    66196610
    66206611    if (FAILED(rc))
    6621         logData.resize(0);
    6622 
    6623     aData.resize(logData.size());
    6624     for (size_t i = 0; i < logData.size(); ++i)
    6625         aData[i] = logData[i];
     6612        aData.resize(0);
    66266613
    66276614    return rc;
     
    69826969{
    69836970    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
    6984     com::SafeArray<BYTE> icon(mUserData->mIcon.size());
    6985     aIcon.resize(mUserData->mIcon.size());
    6986     memcpy(icon.raw(), &mUserData->mIcon[0], mUserData->mIcon.size());
    6987     aIcon.resize(icon.size());
    6988     for (size_t i = 0; i < icon.size(); ++i)
    6989         aIcon[i] = icon[i];
     6971    size_t cbIcon = mUserData->mIcon.size();
     6972    aIcon.resize(cbIcon);
     6973    if (cbIcon)
     6974        memcpy(&aIcon.front(), &mUserData->mIcon[0], cbIcon);
    69906975    return S_OK;
    69916976}
     
    69996984        i_setModified(IsModified_MachineData);
    70006985        mUserData.backup();
    7001         com::SafeArray<BYTE> icon(aIcon);
    7002         mUserData->mIcon.resize(aIcon.size());
    7003         memcpy(&mUserData->mIcon[0], icon.raw(), mUserData->mIcon.size());
     6986        size_t cbIcon = aIcon.size();
     6987        mUserData->mIcon.resize(cbIcon);
     6988        if (cbIcon)
     6989            memcpy(&mUserData->mIcon[0], &aIcon.front(), cbIcon);
    70046990    }
    70056991    return hrc;
     
    70086994HRESULT Machine::getUSBProxyAvailable(BOOL *aUSBProxyAvailable)
    70096995{
    7010 
    70116996#ifdef VBOX_WITH_USB
    70126997    *aUSBProxyAvailable = true;
     
    84248409                        cbOut,
    84258410                        DECODE_STR_MAX);
    8426     com::SafeArray<BYTE> iconByte(cbOut);
    8427     int vrc = RTBase64Decode(pszStr, iconByte.raw(), cbOut, NULL, NULL);
     8411    mUserData->mIcon.resize(cbOut);
     8412    int vrc = VINF_SUCCESS;
     8413    if (cbOut)
     8414        vrc = RTBase64Decode(pszStr, &mUserData->mIcon.front(), cbOut, NULL, NULL);
    84288415    if (RT_FAILURE(vrc))
     8416    {
     8417        mUserData->mIcon.resize(0);
    84298418        return setError(E_FAIL,
    84308419                        tr("Failure to Decode Icon Data. '%s' (%Rrc)"),
    84318420                        pszStr,
    84328421                        vrc);
    8433     mUserData->mIcon.resize(iconByte.size());
    8434     memcpy(&mUserData->mIcon[0], iconByte.raw(), mUserData->mIcon.size());
     8422    }
    84358423
    84368424    // look up the object by Id to check it is valid
     
    98219809
    98229810    // Encode the Icon Override data from Machine and store on config userdata.
    9823     com::SafeArray<BYTE> iconByte;
    9824     COMGETTER(Icon)(ComSafeArrayAsOutParam(iconByte));
     9811    std::vector<BYTE> iconByte;
     9812    getIcon(iconByte);
    98259813    ssize_t cbData = iconByte.size();
    98269814    if (cbData > 0)
     
    98299817        Utf8Str strIconData;
    98309818        strIconData.reserve(cchOut+1);
    9831         int vrc = RTBase64Encode(iconByte.raw(), cbData,
     9819        int vrc = RTBase64Encode(&iconByte.front(), cbData,
    98329820                                 strIconData.mutableRaw(), strIconData.capacity(),
    98339821                                 NULL);
  • trunk/src/VBox/Main/src-server/USBProxyService.cpp

    r51498 r52934  
    133133 * @remarks The caller must own the write lock of the host object.
    134134 */
    135 HRESULT USBProxyService::getDeviceCollection(ComSafeArrayOut(IHostUSBDevice *, aUSBDevices))
     135HRESULT USBProxyService::getDeviceCollection(std::vector<ComPtr<IHostUSBDevice> > &aUSBDevices)
    136136{
    137137    AssertReturn(isWriteLockOnCurrentThread(), E_FAIL);
    138     CheckComArgOutSafeArrayPointerValid(aUSBDevices);
    139138
    140139    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
    141140
    142     SafeIfaceArray<IHostUSBDevice> Collection(mDevices);
    143     Collection.detachTo(ComSafeArrayOutArg(aUSBDevices));
     141    aUSBDevices.resize(mDevices.size());
     142    size_t i = 0;
     143    for (HostUSBDeviceList::const_iterator it = mDevices.begin(); it != mDevices.end(); ++it, ++i)
     144        aUSBDevices[i] = *it;
    144145
    145146    return S_OK;
  • trunk/src/VBox/Main/src-server/VirtualBoxImpl.cpp

    r52615 r52934  
    32093209 * Takes a list of machine groups, and sanitizes/validates it.
    32103210 *
    3211  * @param aMachineGroups    Safearray with the machine groups.
     3211 * @param aMachineGroups    Array with the machine groups.
    32123212 * @param pllMachineGroups  Pointer to list of strings for the result.
    32133213 *
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