From: Felix Domke Date: Fri, 28 Apr 2006 15:51:06 +0000 (+0000) Subject: fix empty expressions in dvb list search X-Git-Tag: 2.6.0~3535 X-Git-Url: https://git.cweiske.de/enigma2.git/commitdiff_plain/fd13ebee91e14b0bfe9116b379644b25e6291c4d?ds=inline fix empty expressions in dvb list search --- diff --git a/lib/dvb/db.cpp b/lib/dvb/db.cpp index 1f38d152..244c2f0c 100644 --- a/lib/dvb/db.cpp +++ b/lib/dvb/db.cpp @@ -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 &res, std::list::const_iterator begin, std::list::const_iterator end) { std::list::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 &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; diff --git a/lib/dvb/idvb.h b/lib/dvb/idvb.h index de2b5644..f4e28d2b 100644 --- a/lib/dvb/idvb.h +++ b/lib/dvb/idvb.h @@ -292,7 +292,8 @@ public: tSatellitePosition, tChannelID, tAND, - tOR + tOR, + tAny }; int m_type;