Ticket #1773: mythmediamonitor.patch

File mythmediamonitor.patch, 4.0 KB (added by leo+nospam at weppelman.net, 14 years ago)
  • mythmediamonitor.h

     
    8080    bool CheckMountable(void);
    8181    bool FindPartitions(const QString &dev, bool checkPartitions);
    8282
    83     void AddDevice(MythMediaDevice* pDevice);
     83    bool AddDevice(MythMediaDevice* pDevice);
    8484    bool AddDevice(const char* dev);
    8585    bool AddDevice(struct fstab* mep);
    8686    bool RemoveDevice(const QString &dev);
  • mythmediamonitor.cpp

     
    347347    return l;
    348348}
    349349
    350 // Given a media deivce add it to our collection.
    351 void MediaMonitor::AddDevice(MythMediaDevice* pDevice)
     350// Given a media device add it to our collection.
     351bool MediaMonitor::AddDevice(MythMediaDevice* pDevice)
    352352{
     353    dev_t new_rdev;
     354    struct stat sb;
     355
     356    if (stat(pDevice->getDevicePath(), &sb) < 0) {
     357        perror("stat: ");
     358        cerr << "MediaMonitor::AddDevice - Failed to stat " <<
     359                pDevice->getDevicePath() << endl;
     360        return false;
     361    }
     362    new_rdev = sb.st_rdev;
     363
     364
     365    //
     366    // Check if this is a duplicate of a device we have already added
     367    //
     368    QValueList<MythMediaDevice*>::iterator itr = m_Devices.begin();
     369    MythMediaDevice* pDev;
     370    while (itr != m_Devices.end())
     371    {
     372        pDev = *itr;
     373        if (stat(pDev->getDevicePath(), &sb) < 0) {
     374            perror("stat: ");
     375            cerr << "MediaMonitor::AddDevice - Failed to stat " <<
     376                pDevice->getDevicePath() << endl;
     377            return false;
     378        }
     379
     380        if (sb.st_rdev == new_rdev) {
     381            VERBOSE(VB_IMPORTANT, QString("Mediamonitor: Not adding %1, it's a duplicate")
     382                         .arg(pDevice->getDevicePath()));
     383            return false;
     384        }
     385    }
     386
    353387    QMutexLocker locker(&m_DevicesLock);
    354388
    355389    connect(pDevice, SIGNAL(statusChanged(MediaStatus, MythMediaDevice*)),
    356390            this, SLOT(mediaStatusChanged(MediaStatus, MythMediaDevice*)));
    357391    m_Devices.push_back( pDevice );
    358392    m_UseCount[pDevice] = 0;
     393    return true;
    359394}
    360395
    361396// Given a fstab entry to a media device determine what type of device it is
     
    424459             strncpy(devstr, dev, len);
    425460             devstr[len] = 0;
    426461             if (is_cdrom)
    427                  MythCDROM::get(this, QString(devstr),
     462                 pDevice = MythCDROM::get(this, QString(devstr),
    428463                                is_supermount, m_AllowEject);
    429464         }
    430465         else
     
    438473                         .arg(pDevice->getDevicePath()));
    439474         if (pDevice->testMedia() == MEDIAERR_OK)
    440475         {
    441              AddDevice(pDevice);
    442              return true;
     476             if (AddDevice(pDevice))
     477                return true;
    443478         }
    444             else
    445                 delete pDevice;
     479         delete pDevice;
    446480      }
    447481
    448482     return false;
     
    520554 */
    521555bool MediaMonitor::FindPartitions(const QString &dev, bool checkPartitions)
    522556{
     557    MythMediaDevice* pDevice = NULL;
     558
    523559    if (checkPartitions)
    524560    {
    525561        // check for partitions
     
    552588        QString device_file = GetDeviceFile(dev);
    553589        if (!device_file.isNull())
    554590        {
    555             AddDevice(MythCDROM::get(this, device_file, false, m_AllowEject));
    556             return true;
     591            pDevice = MythCDROM::get(this, device_file, false, m_AllowEject);
     592
     593            if (AddDevice(pDevice))
     594                return true;
    557595        }
    558596    }
    559597    else
     
    562600        QString device_file = GetDeviceFile(dev);
    563601        if (!device_file.isNull())
    564602        {
    565             AddDevice(MythHDD::Get(this, device_file, false, false));
    566             return true;
     603            pDevice = MythHDD::Get(this, device_file, false, false);
     604            if (AddDevice(pDevice))
     605                return true;
    567606        }
    568607    }
     608    if (pDevice != NULL)
     609        delete pDevice;
    569610
    570611    return false;
    571612}