fix empty expressions in dvb list search
authorFelix Domke <tmbinc@elitedvb.net>
Fri, 28 Apr 2006 15:51:06 +0000 (15:51 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Fri, 28 Apr 2006 15:51:06 +0000 (15:51 +0000)
lib/dvb/db.cpp
lib/dvb/idvb.h

index 1f38d152d3593b77bd34b4cee5c881dc51c0fc0c..244c2f0cc42d8c67a2e50bdeabd1886b6e2aca43 100644 (file)
@@ -209,6 +209,9 @@ int eDVBService::checkFilter(const eServiceReferenceDVB &ref, const eDVBChannelQ
        case eDVBChannelQuery::tOR:
                res = checkFilter(ref, *query.m_p1) || checkFilter(ref, *query.m_p2);
                break;
+       case eDVBChannelQuery::tAny:
+               res = 1;
+               break;
        }
 
        if (query.m_inverse)
@@ -1016,6 +1019,13 @@ static int decodeType(const std::string &type)
 RESULT parseExpression(ePtr<eDVBChannelQuery> &res, std::list<std::string>::const_iterator begin, std::list<std::string>::const_iterator end)
 {
        std::list<std::string>::const_iterator end_of_exp;
+       
+       if (begin == end)
+       {
+               eDebug("empty expression!");
+               return 0;
+       }
+       
        if (*begin == "(")
        {
                end_of_exp = begin;
@@ -1232,6 +1242,13 @@ RESULT eDVBChannelQuery::compile(ePtr<eDVBChannelQuery> &res, std::string query)
                /* now we recursivly parse that. */
        int r = parseExpression(res, tokens.begin(), tokens.end());
        
+               /* we have an empty (but valid!) expression */
+       if (!r && !res)
+       {
+               res = new eDVBChannelQuery();
+               res->m_type = eDVBChannelQuery::tAny;
+       }
+       
        if (res)
        {
                res->m_sort = sort;
index de2b56442cbdf63bdb257e93c7c9d400b7342717..f4e28d2b4b3910e8853a9ba84fa1e0519ed179fd 100644 (file)
@@ -292,7 +292,8 @@ public:
                tSatellitePosition,
                tChannelID,
                tAND,
-               tOR
+               tOR,
+               tAny
        };
        
        int m_type;