1 // Copyright (c) 2012- PPSSPP Project. 2 3 // This program is free software: you can redistribute it and/or modify 4 // it under the terms of the GNU General Public License as published by 5 // the Free Software Foundation, version 2.0 or later versions. 6 7 // This program is distributed in the hope that it will be useful, 8 // but WITHOUT ANY WARRANTY; without even the implied warranty of 9 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 // GNU General Public License 2.0 for more details. 11 12 // A copy of the GPL 2.0 should have been included with the program. 13 // If not, see http://www.gnu.org/licenses/ 14 15 // Official git repository and contact information can be found at 16 // https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/. 17 18 #pragma once 19 20 #include <mutex> 21 22 #include "Common/CommonTypes.h" 23 #include "Common/File/Path.h" 24 #include "Core/Loaders.h" 25 26 #ifdef _WIN32 27 typedef void *HANDLE; 28 #endif 29 30 class LocalFileLoader : public FileLoader { 31 public: 32 LocalFileLoader(const Path &filename); 33 virtual ~LocalFileLoader(); 34 35 virtual bool Exists() override; 36 virtual bool IsDirectory() override; 37 virtual s64 FileSize() override; GetPath()38 virtual Path GetPath() const override { 39 return filename_; 40 } 41 virtual size_t ReadAt(s64 absolutePos, size_t bytes, size_t count, void *data, Flags flags = Flags::NONE) override; 42 43 private: 44 #ifndef _WIN32 45 void DetectSizeFd(); 46 int fd_ = -1; 47 #else 48 HANDLE handle_ = 0; 49 #endif 50 u64 filesize_ = 0; 51 Path filename_; 52 std::mutex readLock_; 53 bool isOpenedByFd_ = false; 54 }; 55