X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/244459c4b2588ac9ca4b3fcbac05a2f8a7ee1641..59efe28a00e5713ad5279ed976430da31292a129:/lib/service/servicefs.cpp diff --git a/lib/service/servicefs.cpp b/lib/service/servicefs.cpp index b0d53922..cf3f31f6 100644 --- a/lib/service/servicefs.cpp +++ b/lib/service/servicefs.cpp @@ -12,12 +12,12 @@ #include #include - class eStaticServiceFSInformation: public iStaticServiceInformation { DECLARE_REF(eStaticServiceFSInformation); public: RESULT getName(const eServiceReference &ref, std::string &name); + int getLength(const eServiceReference &ref) { return -1; } }; DEFINE_REF(eStaticServiceFSInformation); @@ -33,7 +33,7 @@ eServiceFactoryFS::eServiceFactoryFS() { ePtr sc; - eServiceCenter::getInstance(sc); + eServiceCenter::getPrivInstance(sc); if (sc) sc->addServiceFactory(eServiceFactoryFS::id, this); @@ -44,7 +44,7 @@ eServiceFactoryFS::~eServiceFactoryFS() { ePtr sc; - eServiceCenter::getInstance(sc); + eServiceCenter::getPrivInstance(sc); if (sc) sc->removeServiceFactory(eServiceFactoryFS::id); } @@ -76,6 +76,12 @@ RESULT eServiceFactoryFS::info(const eServiceReference &ref, ePtr &ptr) +{ + ptr = 0; + return -1; +} + // eServiceFS DEFINE_REF(eServiceFS); @@ -133,6 +139,7 @@ RESULT eServiceFS::getContent(std::list &list) } } } + closedir(d); return 0; } @@ -147,11 +154,26 @@ RESULT eServiceFS::getNext(eServiceReference &ptr) } if (!m_list.size()) + { + ptr = eServiceReference(); return -ERANGE; + } ptr = m_list.front(); m_list.pop_front(); return 0; } +int eServiceFS::compareLessEqual(const eServiceReference &a, const eServiceReference &b) +{ + /* directories first */ + if ((a.flags & ~b.flags) & eServiceReference::isDirectory) + return 1; + else if ((~a.flags & b.flags) & eServiceReference::isDirectory) + return 0; + /* sort by filename */ + else + return a.path < b.path; +} + eAutoInitPtr init_eServiceFactoryFS(eAutoInitNumbers::service+1, "eServiceFactoryFS");