X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/b44c3ff96ad305e2d5c0eb87ce3aa4a9abe3cb77..5d6aca12c38d3eee7a5d34f778c5ac93a5f6cd9f:/lib/dvb/db.cpp diff --git a/lib/dvb/db.cpp b/lib/dvb/db.cpp index 9f4f2dc6..1bfc06ee 100644 --- a/lib/dvb/db.cpp +++ b/lib/dvb/db.cpp @@ -34,20 +34,31 @@ RESULT eBouquet::moveService(const eServiceReference &ref, unsigned int pos) { if ( pos < 0 || pos >= m_services.size() ) return -1; + ++pos; list::iterator source=m_services.end(); list::iterator dest=m_services.end(); + bool forward = false; for (list::iterator it(m_services.begin()); it != m_services.end(); ++it) { - if (dest == m_services.end() && !pos--) + if (dest == m_services.end() && !--pos) dest = it; if (*it == ref) + { source = it; + forward = pos>0; + } if (dest != m_services.end() && source != m_services.end()) break; } if (dest == m_services.end() || source == m_services.end() || source == dest) return -1; - std::iter_swap(source,dest); + while (source != dest) + { + if (forward) + std::iter_swap(source++, source); + else + std::iter_swap(source--, source); + } return 0; }