VirtualBox

Changeset 23223 in vbox for trunk/src/VBox/Main/HostImpl.cpp


Ignore:
Timestamp:
Sep 22, 2009 3:50:03 PM (15 years ago)
Author:
vboxsync
Message:

API: big medium handling change and lots of assorted other cleanups and fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/HostImpl.cpp

    r22615 r23223  
    9494
    9595#include "HostImpl.h"
    96 #include "HostDVDDriveImpl.h"
    97 #include "HostFloppyDriveImpl.h"
    9896#include "HostNetworkInterfaceImpl.h"
    9997#ifdef VBOX_WITH_USB
     
    314312 * @param drives address of result pointer
    315313 */
    316 STDMETHODIMP Host::COMGETTER(DVDDrives) (ComSafeArrayOut(IHostDVDDrive *, aDrives))
     314STDMETHODIMP Host::COMGETTER(DVDDrives)(ComSafeArrayOut(IMedium *, aDrives))
    317315{
    318316    CheckComArgOutSafeArrayPointerValid(aDrives);
     
    323321    AutoWriteLock alock(this);
    324322
    325     std::list< ComObjPtr<HostDVDDrive> > list;
     323    std::list< ComObjPtr<Medium> > list;
    326324    HRESULT rc = S_OK;
    327325    try
     
    338336            {
    339337                driveName[0] = *p;
    340                 ComObjPtr<HostDVDDrive> hostDVDDriveObj;
     338                ComObjPtr<Medium> hostDVDDriveObj;
    341339                hostDVDDriveObj.createObject();
    342                 hostDVDDriveObj->init (Bstr (driveName));
    343                 list.push_back (hostDVDDriveObj);
     340                hostDVDDriveObj->init(mParent, DeviceType_DVD, Bstr(driveName));
     341                list.push_back(hostDVDDriveObj);
    344342            }
    345343            p += _tcslen(p) + 1;
     
    364362                    if (validateDevice(cdromDrive, true))
    365363                    {
    366                         ComObjPtr<HostDVDDrive> hostDVDDriveObj;
     364                        ComObjPtr<Medium> hostDVDDriveObj;
    367365                        hostDVDDriveObj.createObject();
    368                         hostDVDDriveObj->init (Bstr (cdromDrive));
    369                         list.push_back (hostDVDDriveObj);
     366                        hostDVDDriveObj->init(mParent, DeviceType_DVD, Bstr(cdromDrive));
     367                        list.push_back(hostDVDDriveObj);
    370368                    }
    371369                    cdromDrive = strtok(NULL, ":");
     
    378376                if (validateDevice("/cdrom/cdrom0", true))
    379377                {
    380                     ComObjPtr<HostDVDDrive> hostDVDDriveObj;
     378                    ComObjPtr<Medium> hostDVDDriveObj;
    381379                    hostDVDDriveObj.createObject();
    382                     hostDVDDriveObj->init (Bstr ("cdrom/cdrom0"));
    383                     list.push_back (hostDVDDriveObj);
     380                    hostDVDDriveObj->init(mParent, DeviceType_DVD, Bstr("cdrom/cdrom0"));
     381                    list.push_back(hostDVDDriveObj);
    384382                }
    385383
     
    394392                SUCCEEDED(rc) && it != mHostDrives.DVDEnd(); ++it)
    395393            {
    396                 ComObjPtr<HostDVDDrive> hostDVDDriveObj;
    397                 Bstr device(it->mDevice);
    398                 Bstr udi(it->mUdi);
     394                ComObjPtr<Medium> hostDVDDriveObj;
     395                Bstr location(it->mDevice);
    399396                Bstr description(it->mDescription);
    400397                if (SUCCEEDED(rc))
    401398                    rc = hostDVDDriveObj.createObject();
    402399                if (SUCCEEDED(rc))
    403                     rc = hostDVDDriveObj->init (device, udi, description);
     400                    rc = hostDVDDriveObj->init(mParent, DeviceType_DVD, location, description);
    404401                if (SUCCEEDED(rc))
    405402                    list.push_back(hostDVDDriveObj);
     
    409406        while (cur)
    410407        {
    411             ComObjPtr<HostDVDDrive> hostDVDDriveObj;
     408            ComObjPtr<Medium> hostDVDDriveObj;
    412409            hostDVDDriveObj.createObject();
    413410            hostDVDDriveObj->init(Bstr(cur->szName));
     
    430427#endif
    431428
    432         SafeIfaceArray<IHostDVDDrive> array (list);
     429        SafeIfaceArray<IMedium> array(list);
    433430        array.detachTo(ComSafeArrayOutArg(aDrives));
    434431    }
     
    446443 * @param drives address of result pointer
    447444 */
    448 STDMETHODIMP Host::COMGETTER(FloppyDrives) (ComSafeArrayOut(IHostFloppyDrive *, aDrives))
     445STDMETHODIMP Host::COMGETTER(FloppyDrives)(ComSafeArrayOut(IMedium *, aDrives))
    449446{
    450447    CheckComArgOutPointerValid(aDrives);
     
    455452    AutoWriteLock alock(this);
    456453
    457     std::list<ComObjPtr<HostFloppyDrive> > list;
     454    std::list<ComObjPtr<Medium> > list;
    458455    HRESULT rc = S_OK;
    459456
     
    471468            {
    472469                driveName[0] = *p;
    473                 ComObjPtr<HostFloppyDrive> hostFloppyDriveObj;
     470                ComObjPtr<Medium> hostFloppyDriveObj;
    474471                hostFloppyDriveObj.createObject();
    475                 hostFloppyDriveObj->init (Bstr (driveName));
    476                 list.push_back (hostFloppyDriveObj);
     472                hostFloppyDriveObj->init(mParent, DeviceType_Floppy, Bstr(driveName));
     473                list.push_back(hostFloppyDriveObj);
    477474            }
    478475            p += _tcslen(p) + 1;
     
    485482                SUCCEEDED(rc) && it != mHostDrives.FloppyEnd(); ++it)
    486483            {
    487                 ComObjPtr<HostFloppyDrive> hostFloppyDriveObj;
    488                 Bstr device(it->mDevice);
    489                 Bstr udi(it->mUdi);
     484                ComObjPtr<Medium> hostFloppyDriveObj;
     485                Bstr location(it->mDevice);
    490486                Bstr description(it->mDescription);
    491487                if (SUCCEEDED(rc))
    492488                    rc = hostFloppyDriveObj.createObject();
    493489                if (SUCCEEDED(rc))
    494                     rc = hostFloppyDriveObj->init (device, udi, description);
     490                    rc = hostFloppyDriveObj->init(mParent, DeviceType_Floppy, location, description);
    495491                if (SUCCEEDED(rc))
    496492                    list.push_back(hostFloppyDriveObj);
     
    500496#endif
    501497
    502         SafeIfaceArray<IHostFloppyDrive> collection (list);
     498        SafeIfaceArray<IMedium> collection(list);
    503499        collection.detachTo(ComSafeArrayOutArg(aDrives));
    504500    }
     
    14811477 * @retval  list drives found will be attached to this list
    14821478 */
    1483 bool Host::getDVDInfoFromHal(std::list <ComObjPtr<HostDVDDrive> > &list)
     1479bool Host::getDVDInfoFromHal(std::list <ComObjPtr<Medium> > &list)
    14841480{
    14851481    bool halSuccess = false;
     
    15591555                                            description = product;
    15601556                                        }
    1561                                         ComObjPtr<HostDVDDrive> hostDVDDriveObj;
     1557                                        ComObjPtr<Medium> hostDVDDriveObj;
    15621558                                        hostDVDDriveObj.createObject();
    15631559                                        hostDVDDriveObj->init (Bstr (devNode),
     
    15741570                                            gDBusErrorFree(&dbusError);
    15751571                                        }
    1576                                         ComObjPtr<HostDVDDrive> hostDVDDriveObj;
     1572                                        ComObjPtr<Medium> hostDVDDriveObj;
    15771573                                        hostDVDDriveObj.createObject();
    15781574                                        hostDVDDriveObj->init (Bstr (devNode),
     
    16531649 * @retval  list drives found will be attached to this list
    16541650 */
    1655 bool Host::getFloppyInfoFromHal(std::list <ComObjPtr<HostFloppyDrive> > &list)
     1651bool Host::getFloppyInfoFromHal(std::list <ComObjPtr<Medium> > &list)
    16561652{
    16571653    bool halSuccess = false;
     
    17231719                                            description = product;
    17241720                                        }
    1725                                         ComObjPtr<HostFloppyDrive> hostFloppyDrive;
     1721                                        ComObjPtr<Medium> hostFloppyDrive;
    17261722                                        hostFloppyDrive.createObject();
    17271723                                        hostFloppyDrive->init (Bstr (devNode),
     
    17381734                                            gDBusErrorFree(&dbusError);
    17391735                                        }
    1740                                         ComObjPtr<HostFloppyDrive> hostFloppyDrive;
     1736                                        ComObjPtr<Medium> hostFloppyDrive;
    17411737                                        hostFloppyDrive.createObject();
    17421738                                        hostFloppyDrive->init (Bstr (devNode),
     
    18111807 * Helper function to parse the given mount file and add found entries
    18121808 */
    1813 void Host::parseMountTable(char *mountTable, std::list <ComObjPtr<HostDVDDrive> > &list)
     1809void Host::parseMountTable(char *mountTable, std::list <ComObjPtr<Medium> > &list)
    18141810{
    18151811#ifdef RT_OS_LINUX
     
    18611857                if (validateDevice(mnt_dev, true))
    18621858                {
    1863                     ComObjPtr<HostDVDDrive> hostDVDDriveObj;
     1859                    ComObjPtr<Medium> hostDVDDriveObj;
    18641860                    hostDVDDriveObj.createObject();
    18651861                    hostDVDDriveObj->init (Bstr (mnt_dev));
     
    18931889                if (validateDevice(rawDevName, true))
    18941890                {
    1895                     ComObjPtr<HostDVDDrive> hostDVDDriveObj;
     1891                    ComObjPtr<Medium> hostDVDDriveObj;
    18961892                    hostDVDDriveObj.createObject();
    18971893                    hostDVDDriveObj->init (Bstr (rawDevName));
     
    21232119#endif /* VBOX_WITH_RESOURCE_USAGE_API */
    21242120
    2125 STDMETHODIMP Host::FindHostDVDDrive(IN_BSTR aName, IHostDVDDrive **aDrive)
     2121STDMETHODIMP Host::FindHostDVDDrive(IN_BSTR aName, IMedium **aDrive)
    21262122{
    21272123    CheckComArgNotNull(aName);
     
    21302126    *aDrive = NULL;
    21312127
    2132     SafeIfaceArray<IHostDVDDrive> drivevec;
    2133     HRESULT rc = COMGETTER(DVDDrives) (ComSafeArrayAsOutParam(drivevec));
     2128    SafeIfaceArray<IMedium> drivevec;
     2129    HRESULT rc = COMGETTER(DVDDrives)(ComSafeArrayAsOutParam(drivevec));
    21342130    CheckComRCReturnRC(rc);
    21352131
    21362132    for (size_t i = 0; i < drivevec.size(); ++i)
    21372133    {
     2134        ComPtr<IMedium> drive = drivevec[i];
     2135        Bstr name, location;
     2136        rc = drive->COMGETTER(Name)(name.asOutParam());
     2137        CheckComRCReturnRC(rc);
     2138        rc = drive->COMGETTER(Location)(location.asOutParam());
     2139        CheckComRCReturnRC(rc);
     2140        if (name == aName || location == aName)
     2141            return drive.queryInterfaceTo(aDrive);
     2142    }
     2143
     2144    return setError(VBOX_E_OBJECT_NOT_FOUND,
     2145                    Medium::tr("The host DVD drive named '%ls' could not be found"), aName);
     2146}
     2147
     2148STDMETHODIMP Host::FindHostFloppyDrive(IN_BSTR aName, IMedium **aDrive)
     2149{
     2150    CheckComArgNotNull(aName);
     2151    CheckComArgOutPointerValid(aDrive);
     2152
     2153    *aDrive = NULL;
     2154
     2155    SafeIfaceArray<IMedium> drivevec;
     2156    HRESULT rc = COMGETTER(FloppyDrives)(ComSafeArrayAsOutParam(drivevec));
     2157    CheckComRCReturnRC(rc);
     2158
     2159    for (size_t i = 0; i < drivevec.size(); ++i)
     2160    {
     2161        ComPtr<IMedium> drive = drivevec[i];
    21382162        Bstr name;
    2139         rc = drivevec[i]->COMGETTER(Name) (name.asOutParam());
     2163        rc = drive->COMGETTER(Name)(name.asOutParam());
    21402164        CheckComRCReturnRC(rc);
    21412165        if (name == aName)
    2142         {
    2143             ComObjPtr<HostDVDDrive> found;
    2144             found.createObject();
    2145             Bstr udi, description;
    2146             rc = drivevec[i]->COMGETTER(Udi) (udi.asOutParam());
    2147             CheckComRCReturnRC(rc);
    2148             rc = drivevec[i]->COMGETTER(Description) (description.asOutParam());
    2149             CheckComRCReturnRC(rc);
    2150             found->init(name, udi, description);
    2151             return found.queryInterfaceTo(aDrive);
    2152         }
    2153     }
    2154 
    2155     return setError (VBOX_E_OBJECT_NOT_FOUND, HostDVDDrive::tr (
    2156         "The host DVD drive named '%ls' could not be found"), aName);
    2157 }
    2158 
    2159 STDMETHODIMP Host::FindHostFloppyDrive(IN_BSTR aName, IHostFloppyDrive **aDrive)
    2160 {
    2161     CheckComArgNotNull(aName);
    2162     CheckComArgOutPointerValid(aDrive);
    2163 
    2164     *aDrive = NULL;
    2165 
    2166     SafeIfaceArray<IHostFloppyDrive> drivevec;
    2167     HRESULT rc = COMGETTER(FloppyDrives) (ComSafeArrayAsOutParam(drivevec));
    2168     CheckComRCReturnRC(rc);
    2169 
    2170     for (size_t i = 0; i < drivevec.size(); ++i)
    2171     {
    2172         Bstr name;
    2173         rc = drivevec[i]->COMGETTER(Name) (name.asOutParam());
    2174         CheckComRCReturnRC(rc);
    2175         if (name == aName)
    2176         {
    2177             ComObjPtr<HostFloppyDrive> found;
    2178             found.createObject();
    2179             Bstr udi, description;
    2180             rc = drivevec[i]->COMGETTER(Udi) (udi.asOutParam());
    2181             CheckComRCReturnRC(rc);
    2182             rc = drivevec[i]->COMGETTER(Description) (description.asOutParam());
    2183             CheckComRCReturnRC(rc);
    2184             found->init(name, udi, description);
    2185             return found.queryInterfaceTo(aDrive);
    2186         }
    2187     }
    2188 
    2189     return setError (VBOX_E_OBJECT_NOT_FOUND, HostFloppyDrive::tr (
    2190         "The host floppy drive named '%ls' could not be found"), aName);
     2166            return drive.queryInterfaceTo(aDrive);
     2167    }
     2168
     2169    return setError(VBOX_E_OBJECT_NOT_FOUND,
     2170                    Medium::tr("The host floppy drive named '%ls' could not be found"), aName);
    21912171}
    21922172
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