diff options
author | bunnei <ericbunnie@gmail.com> | 2014-04-09 01:25:03 +0200 |
---|---|---|
committer | bunnei <ericbunnie@gmail.com> | 2014-04-09 01:25:03 +0200 |
commit | 63e46abdb8764bc97e91bae862c8d461e61b1965 (patch) | |
tree | e73f4aa25d7b4015a265e7bbfb6004dab7561027 /src/core/file_sys/file_sys.h | |
parent | fixed some license headers that I missed (diff) | |
download | yuzu-63e46abdb8764bc97e91bae862c8d461e61b1965.tar yuzu-63e46abdb8764bc97e91bae862c8d461e61b1965.tar.gz yuzu-63e46abdb8764bc97e91bae862c8d461e61b1965.tar.bz2 yuzu-63e46abdb8764bc97e91bae862c8d461e61b1965.tar.lz yuzu-63e46abdb8764bc97e91bae862c8d461e61b1965.tar.xz yuzu-63e46abdb8764bc97e91bae862c8d461e61b1965.tar.zst yuzu-63e46abdb8764bc97e91bae862c8d461e61b1965.zip |
Diffstat (limited to 'src/core/file_sys/file_sys.h')
-rw-r--r-- | src/core/file_sys/file_sys.h | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/src/core/file_sys/file_sys.h b/src/core/file_sys/file_sys.h new file mode 100644 index 000000000..b27e36c80 --- /dev/null +++ b/src/core/file_sys/file_sys.h @@ -0,0 +1,138 @@ +// Copyright (c) 2012- PPSSPP Project. + +// 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, version 2.0 or later versions. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official git repository and contact information can be found at +// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/. + +#pragma once + +#include "common.h" +#include "chunk_file.h" + +enum FileAccess { + FILEACCESS_NONE=0, + FILEACCESS_READ=1, + FILEACCESS_WRITE=2, + FILEACCESS_APPEND=4, + FILEACCESS_CREATE=8 +}; + +enum FileMove { + FILEMOVE_BEGIN=0, + FILEMOVE_CURRENT=1, + FILEMOVE_END=2 +}; + +enum FileType { + FILETYPE_NORMAL=1, + FILETYPE_DIRECTORY=2 +}; + + +class IHandleAllocator { +public: + virtual ~IHandleAllocator() {} + virtual u32 GetNewHandle() = 0; + virtual void FreeHandle(u32 handle) = 0; +}; + +class SequentialHandleAllocator : public IHandleAllocator { +public: + SequentialHandleAllocator() : handle_(1) {} + virtual u32 GetNewHandle() { return handle_++; } + virtual void FreeHandle(u32 handle) {} +private: + int handle_; +}; + +struct FileInfo { + FileInfo() + : size(0), access(0), exists(false), type(FILETYPE_NORMAL), isOnSectorSystem(false), startSector(0), numSectors(0) {} + + void DoState(PointerWrap &p) { + auto s = p.Section("FileInfo", 1); + if (!s) + return; + + p.Do(name); + p.Do(size); + p.Do(access); + p.Do(exists); + p.Do(type); + p.Do(atime); + p.Do(ctime); + p.Do(mtime); + p.Do(isOnSectorSystem); + p.Do(startSector); + p.Do(numSectors); + p.Do(sectorSize); + } + + std::string name; + s64 size; + u32 access; //unix 777 + bool exists; + FileType type; + + tm atime; + tm ctime; + tm mtime; + + bool isOnSectorSystem; + u32 startSector; + u32 numSectors; + u32 sectorSize; +}; + + +class IFileSystem { +public: + virtual ~IFileSystem() {} + + virtual void DoState(PointerWrap &p) = 0; + virtual std::vector<FileInfo> GetDirListing(std::string path) = 0; + virtual u32 OpenFile(std::string filename, FileAccess access, const char *devicename=NULL) = 0; + virtual void CloseFile(u32 handle) = 0; + virtual size_t ReadFile(u32 handle, u8 *pointer, s64 size) = 0; + virtual size_t WriteFile(u32 handle, const u8 *pointer, s64 size) = 0; + virtual size_t SeekFile(u32 handle, s32 position, FileMove type) = 0; + virtual FileInfo GetFileInfo(std::string filename) = 0; + virtual bool OwnsHandle(u32 handle) = 0; + virtual bool MkDir(const std::string &dirname) = 0; + virtual bool RmDir(const std::string &dirname) = 0; + virtual int RenameFile(const std::string &from, const std::string &to) = 0; + virtual bool RemoveFile(const std::string &filename) = 0; + virtual bool GetHostPath(const std::string &inpath, std::string &outpath) = 0; +}; + + +class EmptyFileSystem : public IFileSystem { +public: + virtual void DoState(PointerWrap &p) {} + std::vector<FileInfo> GetDirListing(std::string path) {std::vector<FileInfo> vec; return vec;} + u32 OpenFile(std::string filename, FileAccess access, const char *devicename=NULL) {return 0;} + void CloseFile(u32 handle) {} + size_t ReadFile(u32 handle, u8 *pointer, s64 size) {return 0;} + size_t WriteFile(u32 handle, const u8 *pointer, s64 size) {return 0;} + size_t SeekFile(u32 handle, s32 position, FileMove type) {return 0;} + FileInfo GetFileInfo(std::string filename) {FileInfo f; return f;} + bool OwnsHandle(u32 handle) {return false;} + virtual bool MkDir(const std::string &dirname) {return false;} + virtual bool RmDir(const std::string &dirname) {return false;} + virtual int RenameFile(const std::string &from, const std::string &to) {return -1;} + virtual bool RemoveFile(const std::string &filename) {return false;} + virtual bool GetHostPath(const std::string &inpath, std::string &outpath) {return false;} +}; + + |