diff options
Diffstat (limited to 'storage.h')
-rw-r--r-- | storage.h | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/storage.h b/storage.h new file mode 100644 index 0000000..29ae022 --- /dev/null +++ b/storage.h @@ -0,0 +1,65 @@ +/*************************************************************** -*- c++ -*- + * Copyright (c) 2003,2004 by Marcel Wiesweg * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#ifndef __STORAGE_H +#define __STORAGE_H + +#include "rootdir.h" +#include "pageid.h" + +#define TELETEXT_PAGESIZE 972 + +struct StorageHandle { +public: + StorageHandle() { handle=-1; } + StorageHandle(const StorageHandle &s) { handle=s.handle; } + StorageHandle(int h) { handle=h; } + StorageHandle &operator=(int h) { handle=h; return *this; } + StorageHandle &operator=(const StorageHandle &s) { handle=s.handle; return *this; } + operator bool() const { return handle!=-1; } + operator int() const { return handle; } +private: + int handle; +}; + +enum StorageSystem { StorageSystemLegacy, StorageSystemPacked }; + +class Storage : public RootDir { +public: + virtual ~Storage(); + enum StorageSystem { StorageSystemLegacy, StorageSystemPacked }; + //must be called before the first call to instance() + + //must be called before operation starts. Set all options (RootDir, maxStorage) before. + virtual void cleanUp() = 0; + + virtual void getFilename(char *buffer, int bufLength, PageID page); + virtual void prepareDirectory(tChannelID chan); + + virtual StorageHandle openForWriting(PageID page) = 0; + virtual StorageHandle openForReading(PageID page, bool countAsAccess) = 0; + virtual ssize_t write(const void *ptr, size_t size, StorageHandle stream) = 0; + virtual ssize_t read(void *ptr, size_t size, StorageHandle stream) = 0; + virtual void close(StorageHandle stream) = 0; +protected: + Storage(); + int cleanSubDir(const char *dir); + int doCleanUp(); + virtual int actualFileSize(int netFileSize) { return netFileSize; } + void freeSpace(); + bool exists(const char* file); + + long byteCount; + cString currentDir; +private: + bool failedFreeSpace; +}; + +#endif |