Ticket #5099: libs_libmythtv_diseqcsettings.cpp-always-check-dyn_cast.patch

File libs_libmythtv_diseqcsettings.cpp-always-check-dyn_cast.patch, 6.1 KB (added by Erik Hovland <erik@…>, 12 years ago)

check every dynamic_cast()

  • libs/libmythtv/diseqcsettings.cpp

    dynamic_cast can return a null pointer if it was able to upcast.
    
    From: Erik Hovland <erik@hovland.org>
    
    
    ---
    
     libs/libmythtv/diseqcsettings.cpp |   83 +++++++++++++++++++++++++------------
     1 files changed, 55 insertions(+), 28 deletions(-)
    
    diff --git a/libs/libmythtv/diseqcsettings.cpp b/libs/libmythtv/diseqcsettings.cpp
    index 89fdaed..5e036b1 100644
    a b bool convert_diseqc_db(void) 
    13981398                root = DiSEqCDevDevice::CreateByType(
    13991399                    tree, DiSEqCDevDevice::kTypeSwitch);
    14001400                DiSEqCDevSwitch *sw = dynamic_cast<DiSEqCDevSwitch*>(root);
    1401                 sw->SetType(DiSEqCDevSwitch::kTypeTone);
    1402                 sw->SetNumPorts(2);
    1403                 add_lnbs = 2;
     1401                if (sw)
     1402                {
     1403                    sw->SetType(DiSEqCDevSwitch::kTypeTone);
     1404                    sw->SetNumPorts(2);
     1405                    add_lnbs = 2;
     1406                }
    14041407                break;
    14051408            }
    14061409
    bool convert_diseqc_db(void) 
    14111414                root = DiSEqCDevDevice::CreateByType(
    14121415                    tree, DiSEqCDevDevice::kTypeSwitch);
    14131416                DiSEqCDevSwitch *sw = dynamic_cast<DiSEqCDevSwitch*>(root);
    1414                 sw->SetType(DiSEqCDevSwitch::kTypeDiSEqCCommitted);
    1415                 sw->SetNumPorts(2);
    1416                 add_lnbs = 2;
     1417                if (sw)
     1418                {
     1419                    sw->SetType(DiSEqCDevSwitch::kTypeDiSEqCCommitted);
     1420                    sw->SetNumPorts(2);
     1421                    add_lnbs = 2;
     1422                }
    14171423                break;
    14181424            }
    14191425
    bool convert_diseqc_db(void) 
    14241430                root = DiSEqCDevDevice::CreateByType(
    14251431                    tree, DiSEqCDevDevice::kTypeSwitch);
    14261432                DiSEqCDevSwitch *sw = dynamic_cast<DiSEqCDevSwitch*>(root);
    1427                 sw->SetType(DiSEqCDevSwitch::kTypeDiSEqCCommitted);
    1428                 sw->SetNumPorts(4);
    1429                 add_lnbs = 4;
     1433                if (sw)
     1434                {
     1435                    sw->SetType(DiSEqCDevSwitch::kTypeDiSEqCCommitted);
     1436                    sw->SetNumPorts(4);
     1437                    add_lnbs = 4;
     1438                }
    14301439                break;
    14311440            }
    14321441
    bool convert_diseqc_db(void) 
    14361445                root = DiSEqCDevDevice::CreateByType(
    14371446                    tree, DiSEqCDevDevice::kTypeRotor);
    14381447                DiSEqCDevRotor *rotor = dynamic_cast<DiSEqCDevRotor*>(root);
    1439                 rotor->SetType(DiSEqCDevRotor::kTypeDiSEqC_1_2);
    1440                 add_lnbs = 1;
     1448                if (rotor)
     1449                {
     1450                    rotor->SetType(DiSEqCDevRotor::kTypeDiSEqC_1_2);
     1451                    add_lnbs = 1;
     1452                }
    14411453                break;
    14421454            }
    14431455
    bool convert_diseqc_db(void) 
    14471459                root = DiSEqCDevDevice::CreateByType(
    14481460                    tree, DiSEqCDevDevice::kTypeRotor);
    14491461                DiSEqCDevRotor *rotor = dynamic_cast<DiSEqCDevRotor*>(root);
    1450                 rotor->SetType(DiSEqCDevRotor::kTypeDiSEqC_1_3);
    1451                 add_lnbs = 1;
     1462                if (rotor)
     1463                {
     1464                    rotor->SetType(DiSEqCDevRotor::kTypeDiSEqC_1_3);
     1465                    add_lnbs = 1;
     1466                }
    14521467                break;
    14531468            }
    14541469
    bool convert_diseqc_db(void) 
    14581473                root = DiSEqCDevDevice::CreateByType(
    14591474                    tree, DiSEqCDevDevice::kTypeSwitch);
    14601475                DiSEqCDevSwitch *sw = dynamic_cast<DiSEqCDevSwitch*>(root);
    1461                 sw->SetType(DiSEqCDevSwitch::kTypeDiSEqCUncommitted);
    1462                 sw->SetNumPorts(10);
    1463                 add_lnbs = 10;
     1476                if (sw)
     1477                {
     1478                    sw->SetType(DiSEqCDevSwitch::kTypeDiSEqCUncommitted);
     1479                    sw->SetNumPorts(10);
     1480                    add_lnbs = 10;
     1481                }
    14641482                break;
    14651483            }
    14661484
    bool convert_diseqc_db(void) 
    14701488                root = DiSEqCDevDevice::CreateByType(
    14711489                    tree, DiSEqCDevDevice::kTypeSwitch);
    14721490                DiSEqCDevSwitch *sw = dynamic_cast<DiSEqCDevSwitch*>(root);
    1473                 sw->SetType(DiSEqCDevSwitch::kTypeLegacySW21);
    1474                 sw->SetNumPorts(2);
    1475                 add_lnbs = 2;
    1476                 lnb_type = DiSEqCDevLNB::kTypeFixed;
     1491                if (sw)
     1492                {
     1493                    sw->SetType(DiSEqCDevSwitch::kTypeLegacySW21);
     1494                    sw->SetNumPorts(2);
     1495                    add_lnbs = 2;
     1496                    lnb_type = DiSEqCDevLNB::kTypeFixed;
     1497                }
    14771498                break;
    14781499            }
    14791500
    bool convert_diseqc_db(void) 
    14831504                root = DiSEqCDevDevice::CreateByType(
    14841505                    tree, DiSEqCDevDevice::kTypeSwitch);
    14851506                DiSEqCDevSwitch *sw = dynamic_cast<DiSEqCDevSwitch*>(root);
    1486                 sw->SetType(DiSEqCDevSwitch::kTypeLegacySW64);
    1487                 sw->SetNumPorts(3);
    1488                 add_lnbs = 3;
    1489                 lnb_type = DiSEqCDevLNB::kTypeFixed;
     1507                if (sw)
     1508                {
     1509                    sw->SetType(DiSEqCDevSwitch::kTypeLegacySW64);
     1510                    sw->SetNumPorts(3);
     1511                    add_lnbs = 3;
     1512                    lnb_type = DiSEqCDevLNB::kTypeFixed;
     1513                }
    14901514                break;
    14911515            }
    14921516
    bool convert_diseqc_db(void) 
    15091533            DiSEqCDevLNB *lnb = dynamic_cast<DiSEqCDevLNB*>
    15101534                (DiSEqCDevDevice::CreateByType(
    15111535                    tree, DiSEqCDevDevice::kTypeLNB));
    1512             lnb->SetType(lnb_type);
    1513             lnb->SetDescription(QString("LNB #%1").arg(i+1));
    1514             if (!root->SetChild(i, lnb))
    1515                 delete lnb;
     1536            if (lnb)
     1537            {
     1538                lnb->SetType(lnb_type);
     1539                lnb->SetDescription(QString("LNB #%1").arg(i+1));
     1540                if (!root->SetChild(i, lnb))
     1541                    delete lnb;
     1542            }
    15161543        }
    15171544
    15181545        // save the tree to get real device ids