VirtualBox

Changeset 52252 in vbox


Ignore:
Timestamp:
Aug 1, 2014 8:17:46 AM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
95341
Message:

Main: removed unnecesary vector/SafeArray conversion in enumerateGuestProperties.

Location:
trunk/src/VBox/Main
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/include/ConsoleImpl.h

    r52251 r52252  
    177177    HRESULT i_setGuestProperty(const Utf8Str &aName, const Utf8Str &aValue, const Utf8Str &aFlags);
    178178    HRESULT i_deleteGuestProperty(const Utf8Str &aName);
    179     HRESULT i_enumerateGuestProperties(IN_BSTR aPatterns,
    180                                        ComSafeArrayOut(BSTR, aNames),
    181                                        ComSafeArrayOut(BSTR, aValues),
    182                                        ComSafeArrayOut(LONG64, aTimestamps),
    183                                        ComSafeArrayOut(BSTR, aFlags));
     179    HRESULT i_enumerateGuestProperties(const Utf8Str &aPatterns,
     180                                       std::vector<Utf8Str> &aNames,
     181                                       std::vector<Utf8Str> &aValues,
     182                                       std::vector<LONG64>  &aTimestamps,
     183                                       std::vector<Utf8Str> &aFlags);
    184184    HRESULT i_onlineMergeMedium(IMediumAttachment *aMediumAttachment,
    185185                                ULONG aSourceIdx, ULONG aTargetIdx,
     
    820820#ifdef VBOX_WITH_GUEST_PROPS
    821821    static DECLCALLBACK(int)    i_doGuestPropNotification(void *pvExtension, uint32_t, void *pvParms, uint32_t cbParms);
    822     HRESULT                     i_doEnumerateGuestProperties(CBSTR aPatterns,
    823                                                              ComSafeArrayOut(BSTR, aNames),
    824                                                              ComSafeArrayOut(BSTR, aValues),
    825                                                              ComSafeArrayOut(LONG64, aTimestamps),
    826                                                              ComSafeArrayOut(BSTR, aFlags));
     822    HRESULT                     i_doEnumerateGuestProperties(const Utf8Str &aPatterns,
     823                                                             std::vector<Utf8Str> &aNames,
     824                                                             std::vector<Utf8Str> &aValues,
     825                                                             std::vector<LONG64>  &aTimestamps,
     826                                                             std::vector<Utf8Str> &aFlags);
    827827
    828828    void i_guestPropertiesHandleVMReset(void);
  • trunk/src/VBox/Main/src-client/ConsoleImpl.cpp

    r52251 r52252  
    827827void Console::i_guestPropertiesHandleVMReset(void)
    828828{
    829     com::SafeArray<BSTR>   arrNames;
    830     com::SafeArray<BSTR>   arrValues;
    831     com::SafeArray<LONG64> arrTimestamps;
    832     com::SafeArray<BSTR>   arrFlags;
    833     HRESULT hrc = i_enumerateGuestProperties(Bstr("*").raw(),
    834                                              ComSafeArrayAsOutParam(arrNames),
    835                                              ComSafeArrayAsOutParam(arrValues),
    836                                              ComSafeArrayAsOutParam(arrTimestamps),
    837                                              ComSafeArrayAsOutParam(arrFlags));
     829    std::vector<Utf8Str> names;
     830    std::vector<Utf8Str> values;
     831    std::vector<LONG64>  timestamps;
     832    std::vector<Utf8Str> flags;
     833    HRESULT hrc = i_enumerateGuestProperties("*", names, values, timestamps, flags);
    838834    if (SUCCEEDED(hrc))
    839835    {
    840         for (size_t i = 0; i < arrFlags.size(); i++)
     836        for (size_t i = 0; i < flags.size(); i++)
    841837        {
    842838            /* Delete all properties which have the flag "TRANSRESET". */
    843             if (Utf8Str(arrFlags[i]).contains("TRANSRESET", Utf8Str::CaseInsensitive))
     839            if (flags[i].contains("TRANSRESET", Utf8Str::CaseInsensitive))
    844840            {
    845                 hrc = mMachine->DeleteGuestProperty(arrNames[i]);
     841                hrc = mMachine->DeleteGuestProperty(Bstr(names[i]).raw());
    846842                if (FAILED(hrc))
    847                     LogRel(("RESET: Could not delete transient property \"%ls\", rc=%Rhrc\n",
    848                             arrNames[i], hrc));
     843                    LogRel(("RESET: Could not delete transient property \"%s\", rc=%Rhrc\n",
     844                            names[i].c_str(), hrc));
    849845            }
    850846        }
     
    18041800}
    18051801
    1806 HRESULT Console::i_doEnumerateGuestProperties(CBSTR aPatterns,
    1807                                               ComSafeArrayOut(BSTR, aNames),
    1808                                               ComSafeArrayOut(BSTR, aValues),
    1809                                               ComSafeArrayOut(LONG64, aTimestamps),
    1810                                               ComSafeArrayOut(BSTR, aFlags))
     1802HRESULT Console::i_doEnumerateGuestProperties(const Utf8Str &aPatterns,
     1803                                              std::vector<Utf8Str> &aNames,
     1804                                              std::vector<Utf8Str> &aValues,
     1805                                              std::vector<LONG64>  &aTimestamps,
     1806                                              std::vector<Utf8Str> &aFlags)
    18111807{
    18121808    AssertReturn(m_pVMMDev, E_FAIL);
     
    18161812    VBOXHGCMSVCPARM parm[3];
    18171813
    1818     Utf8Str utf8Patterns(aPatterns);
    18191814    parm[0].type = VBOX_HGCM_SVC_PARM_PTR;
    1820     parm[0].u.pointer.addr = (void*)utf8Patterns.c_str();
    1821     parm[0].u.pointer.size = (uint32_t)utf8Patterns.length() + 1;
     1815    parm[0].u.pointer.addr = (void*)aPatterns.c_str();
     1816    parm[0].u.pointer.size = (uint32_t)aPatterns.length() + 1;
    18221817
    18231818    /*
     
    18411836            return E_OUTOFMEMORY;
    18421837        }
     1838
    18431839        parm[1].type = VBOX_HGCM_SVC_PARM_PTR;
    18441840        parm[1].u.pointer.addr = Utf8Buf.mutableRaw();
    18451841        parm[1].u.pointer.size = (uint32_t)cchBuf + 1024;
     1842
     1843        parm[2].type = VBOX_HGCM_SVC_PARM_32BIT;
     1844        parm[2].u.uint32 = 0;
     1845
    18461846        vrc = m_pVMMDev->hgcmHostCall("VBoxGuestPropSvc", ENUM_PROPS_HOST, 3,
    18471847                                      &parm[0]);
     
    18721872    }
    18731873
    1874     /*
    1875      * And now we create the COM safe arrays and fill them in.
    1876      */
    1877     com::SafeArray<BSTR> names(cEntries);
    1878     com::SafeArray<BSTR> values(cEntries);
    1879     com::SafeArray<LONG64> timestamps(cEntries);
    1880     com::SafeArray<BSTR> flags(cEntries);
     1874   
     1875    aNames.resize(cEntries);
     1876    aValues.resize(cEntries);
     1877    aTimestamps.resize(cEntries);
     1878    aFlags.resize(cEntries);
     1879
    18811880    size_t iBuf = 0;
    18821881    /* Rely on the service to have formated the data correctly. */
     
    18841883    {
    18851884        size_t cchName = strlen(pszBuf + iBuf);
    1886         Bstr(pszBuf + iBuf).detachTo(&names[i]);
     1885        aNames[i] = &pszBuf[iBuf];
    18871886        iBuf += cchName + 1;
     1887
    18881888        size_t cchValue = strlen(pszBuf + iBuf);
    1889         Bstr(pszBuf + iBuf).detachTo(&values[i]);
     1889        aValues[i] = &pszBuf[iBuf];
    18901890        iBuf += cchValue + 1;
     1891
    18911892        size_t cchTimestamp = strlen(pszBuf + iBuf);
    1892         timestamps[i] = RTStrToUInt64(pszBuf + iBuf);
     1893        aTimestamps[i] = RTStrToUInt64(&pszBuf[iBuf]);
    18931894        iBuf += cchTimestamp + 1;
     1895
    18941896        size_t cchFlags = strlen(pszBuf + iBuf);
    1895         Bstr(pszBuf + iBuf).detachTo(&flags[i]);
     1897        aFlags[i] = &pszBuf[iBuf];
    18961898        iBuf += cchFlags + 1;
    18971899    }
    1898     names.detachTo(ComSafeArrayOutArg(aNames));
    1899     values.detachTo(ComSafeArrayOutArg(aValues));
    1900     timestamps.detachTo(ComSafeArrayOutArg(aTimestamps));
    1901     flags.detachTo(ComSafeArrayOutArg(aFlags));
     1900
    19021901    return S_OK;
    19031902}
     
    57415740 * @note Temporarily locks this object for writing.
    57425741 */
    5743 HRESULT Console::i_enumerateGuestProperties(IN_BSTR aPatterns,
    5744                                             ComSafeArrayOut(BSTR, aNames),
    5745                                             ComSafeArrayOut(BSTR, aValues),
    5746                                             ComSafeArrayOut(LONG64, aTimestamps),
    5747                                             ComSafeArrayOut(BSTR, aFlags))
     5742HRESULT Console::i_enumerateGuestProperties(const Utf8Str &aPatterns,
     5743                                            std::vector<Utf8Str> &aNames,
     5744                                            std::vector<Utf8Str> &aValues,
     5745                                            std::vector<LONG64>  &aTimestamps,
     5746                                            std::vector<Utf8Str> &aFlags)
    57485747{
    57495748#ifndef VBOX_WITH_GUEST_PROPS
    57505749    ReturnComNotImplemented();
    57515750#else /* VBOX_WITH_GUEST_PROPS */
    5752     if (!VALID_PTR(aPatterns) && (aPatterns != NULL))
    5753         return E_POINTER;
    5754     if (ComSafeArrayOutIsNull(aNames))
    5755         return E_POINTER;
    5756     if (ComSafeArrayOutIsNull(aValues))
    5757         return E_POINTER;
    5758     if (ComSafeArrayOutIsNull(aTimestamps))
    5759         return E_POINTER;
    5760     if (ComSafeArrayOutIsNull(aFlags))
    5761         return E_POINTER;
    57625751
    57635752    AutoCaller autoCaller(this);
     
    57725761     * autoVMCaller, so there is no need to hold a lock of this */
    57735762
    5774     return i_doEnumerateGuestProperties(aPatterns, ComSafeArrayOutArg(aNames),
    5775                                         ComSafeArrayOutArg(aValues),
    5776                                         ComSafeArrayOutArg(aTimestamps),
    5777                                         ComSafeArrayOutArg(aFlags));
     5763    return i_doEnumerateGuestProperties(aPatterns, aNames, aValues, aTimestamps, aFlags);
    57785764#endif /* VBOX_WITH_GUEST_PROPS */
    57795765}
  • trunk/src/VBox/Main/src-client/SessionImpl.cpp

    r52251 r52252  
    883883        return E_ACCESSDENIED;
    884884
    885     com::SafeArray<BSTR>   arrKeys;
    886     com::SafeArray<BSTR>   arrValues;
    887     com::SafeArray<LONG64> arrTimestamps;
    888     com::SafeArray<BSTR>   arrFlags;
    889 
    890     HRESULT hrc = mConsole->i_enumerateGuestProperties(Bstr(aPatterns).raw(),
    891                                                        ComSafeArrayAsOutParam(arrKeys),
    892                                                        ComSafeArrayAsOutParam(arrValues),
    893                                                        ComSafeArrayAsOutParam(arrTimestamps),
    894                                                        ComSafeArrayAsOutParam(arrFlags));
    895 
    896     size_t i = 0;
    897     aKeys.resize(arrKeys.size());
    898     for(i = 0; i < arrKeys.size(); ++i)
    899         aKeys[i] = arrKeys[i];
    900     aValues.resize(arrValues.size());
    901     for(i = 0; i < arrValues.size(); ++i)
    902         aValues[i] = arrValues[i];
    903     aTimestamps.resize(arrTimestamps.size());
    904     for(i = 0; i < arrTimestamps.size(); ++i)
    905         aTimestamps[i] = arrTimestamps[i];
    906     aFlags.resize(arrFlags.size());
    907     for(i = 0; i < arrFlags.size(); ++i)
    908         aFlags[i] = arrFlags[i];
    909 
    910     return hrc;
     885    return mConsole->i_enumerateGuestProperties(aPatterns, aKeys, aValues, aTimestamps, aFlags);
    911886
    912887#else /* VBOX_WITH_GUEST_PROPS not defined */
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