diff options
| author | ghost <andreas.monzner@multimedia-labs.de> | 2010-11-10 17:11:47 +0100 |
|---|---|---|
| committer | ghost <andreas.monzner@multimedia-labs.de> | 2010-11-10 17:11:47 +0100 |
| commit | ff414e7874e0ab4fdf89cce159ea835ac5c5393d (patch) | |
| tree | 7c4c15e6d1c12b5a1cf60e5a364abc9cc91abe03 /lib/base/rawfile.h | |
| parent | b2e416ea9717c8f8e0143a90d823125e9b4a57b6 (diff) | |
| download | enigma2-ff414e7874e0ab4fdf89cce159ea835ac5c5393d.tar.gz enigma2-ff414e7874e0ab4fdf89cce159ea835ac5c5393d.zip | |
move iDataSource to own header file,
change read function for easier thread locking (seek must called with a offset/position every time)
Diffstat (limited to 'lib/base/rawfile.h')
| -rw-r--r-- | lib/base/rawfile.h | 43 |
1 files changed, 7 insertions, 36 deletions
diff --git a/lib/base/rawfile.h b/lib/base/rawfile.h index bb39dc6e..1720d581 100644 --- a/lib/base/rawfile.h +++ b/lib/base/rawfile.h @@ -2,37 +2,7 @@ #define __lib_base_rawfile_h #include <string> -#include <lib/base/object.h> - -class iDataSource: public iObject -{ -public: - virtual off_t lseek(off_t offset, int whence)=0; - virtual ssize_t read(void *buf, size_t count)=0; /* NOTE: you must be able to handle short reads! */ - virtual off_t length()=0; - virtual off_t position()=0; - virtual int valid()=0; - virtual eSingleLock &getLock()=0; - virtual bool is_shared()=0; -}; - -class iDataSourcePositionRestorer -{ - ePtr<iDataSource> &m_source; - off_t m_position; -public: - iDataSourcePositionRestorer(ePtr<iDataSource> &source) - :m_source(source) - { - if (m_source->is_shared()) - m_position = m_source->position(); - } - ~iDataSourcePositionRestorer() - { - if (m_source->is_shared()) - m_source->lseek(m_position, SEEK_SET); - } -}; +#include <lib/base/idatasource.h> class eRawFile: public iDataSource { @@ -43,14 +13,13 @@ public: ~eRawFile(); int open(const char *filename, int cached = 0); void setfd(int fd); - off_t lseek(off_t offset, int whence); int close(); - ssize_t read(void *buf, size_t count); /* NOTE: you must be able to handle short reads! */ + + // iDataSource + off_t lseek(off_t offset, int whence); + ssize_t read(off_t offset, void *buf, size_t count); off_t length(); - off_t position(); int valid(); - eSingleLock &getLock(); - bool is_shared() { return ref.count > 1; } private: int m_fd; /* for uncached */ FILE *m_file; /* for cached */ @@ -61,6 +30,8 @@ private: void scan(); int m_current_file; int switchOffset(off_t off); + + off_t lseek_internal(off_t offset, int whence); FILE *openFileCached(int nr); int openFileUncached(int nr); }; |
