X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/ecf05a2de9a95814a3efdc3dafa0a10ad343f82a..d73219bf587818d7648531da574beb45f6e3c000:/lib/dvb/db.cpp diff --git a/lib/dvb/db.cpp b/lib/dvb/db.cpp index 72977e73..2fbe53e6 100644 --- a/lib/dvb/db.cpp +++ b/lib/dvb/db.cpp @@ -114,6 +114,7 @@ RESULT eBouquet::setListName(const std::string &name) } eDVBService::eDVBService() + :m_flags(0) { } @@ -193,7 +194,7 @@ int eDVBService::checkFilter(const eServiceReferenceDVB &ref, const eDVBChannelQ res = 0; break; case eDVBChannelQuery::tSatellitePosition: - res = (ref.getDVBNamespace().get() >> 16) == query.m_int; + res = ((unsigned int)ref.getDVBNamespace().get())>>16 == query.m_int; break; case eDVBChannelQuery::tChannelID: { @@ -208,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) @@ -244,8 +248,11 @@ void eDVBDB::reloadServicelist() struct stat s; if ( !stat("lamedb", &s) ) { - rename("lamedb", CONFIGDIR"/enigma2/lamedb" ); - reloadServicelist(); + if ( !stat(CONFIGDIR"/enigma2", &s) ) + { + rename("lamedb", CONFIGDIR"/enigma2/lamedb" ); + reloadServicelist(); + } } return; } @@ -1012,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; @@ -1228,6 +1242,14 @@ 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_inverse = 0; + res->m_type = eDVBChannelQuery::tAny; + } + if (res) { res->m_sort = sort;