filesystem: Pass Size Getter functions to IFileSystem for sizes
This commit is contained in:
parent
721a92775d
commit
43af31836e
|
@ -29,11 +29,6 @@
|
||||||
|
|
||||||
namespace Service::FileSystem {
|
namespace Service::FileSystem {
|
||||||
|
|
||||||
// Size of emulated sd card free space, reported in bytes.
|
|
||||||
// Just using 32GB because thats reasonable
|
|
||||||
// TODO(DarkLordZach): Eventually make this configurable in settings.
|
|
||||||
constexpr u64 EMULATED_SD_REPORTED_SIZE = 32000000000;
|
|
||||||
|
|
||||||
// A default size for normal/journal save data size if application control metadata cannot be found.
|
// A default size for normal/journal save data size if application control metadata cannot be found.
|
||||||
// This should be large enough to satisfy even the most extreme requirements (~4.2GB)
|
// This should be large enough to satisfy even the most extreme requirements (~4.2GB)
|
||||||
constexpr u64 SUFFICIENT_SAVE_DATA_SIZE = 0xF0000000;
|
constexpr u64 SUFFICIENT_SAVE_DATA_SIZE = 0xF0000000;
|
||||||
|
@ -227,13 +222,6 @@ ResultVal<FileSys::VirtualDir> VfsDirectoryServiceWrapper::OpenDirectory(const s
|
||||||
return MakeResult(dir);
|
return MakeResult(dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
u64 VfsDirectoryServiceWrapper::GetFreeSpaceSize() const {
|
|
||||||
if (backing->IsWritable())
|
|
||||||
return EMULATED_SD_REPORTED_SIZE;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
ResultVal<FileSys::EntryType> VfsDirectoryServiceWrapper::GetEntryType(
|
ResultVal<FileSys::EntryType> VfsDirectoryServiceWrapper::GetEntryType(
|
||||||
const std::string& path_) const {
|
const std::string& path_) const {
|
||||||
std::string path(FileUtil::SanitizePath(path_));
|
std::string path(FileUtil::SanitizePath(path_));
|
||||||
|
|
|
@ -215,12 +215,6 @@ public:
|
||||||
*/
|
*/
|
||||||
ResultVal<FileSys::VirtualDir> OpenDirectory(const std::string& path);
|
ResultVal<FileSys::VirtualDir> OpenDirectory(const std::string& path);
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the free space
|
|
||||||
* @return The number of free bytes in the archive
|
|
||||||
*/
|
|
||||||
u64 GetFreeSpaceSize() const;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the type of the specified path
|
* Get the type of the specified path
|
||||||
* @return The type of the specified path or error code
|
* @return The type of the specified path or error code
|
||||||
|
|
|
@ -30,6 +30,18 @@
|
||||||
|
|
||||||
namespace Service::FileSystem {
|
namespace Service::FileSystem {
|
||||||
|
|
||||||
|
struct SizeGetter {
|
||||||
|
std::function<u64()> free;
|
||||||
|
std::function<u64()> total;
|
||||||
|
|
||||||
|
static SizeGetter FromStorageId(const FileSystemController& fsc, FileSys::StorageId id) {
|
||||||
|
return {
|
||||||
|
[&fsc, id] { return fsc.GetFreeSpaceSize(id); },
|
||||||
|
[&fsc, id] { return fsc.GetTotalSpaceSize(id); },
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
enum class FileSystemType : u8 {
|
enum class FileSystemType : u8 {
|
||||||
Invalid0 = 0,
|
Invalid0 = 0,
|
||||||
Invalid1 = 1,
|
Invalid1 = 1,
|
||||||
|
@ -289,8 +301,8 @@ private:
|
||||||
|
|
||||||
class IFileSystem final : public ServiceFramework<IFileSystem> {
|
class IFileSystem final : public ServiceFramework<IFileSystem> {
|
||||||
public:
|
public:
|
||||||
explicit IFileSystem(FileSys::VirtualDir backend)
|
explicit IFileSystem(FileSys::VirtualDir backend, SizeGetter size)
|
||||||
: ServiceFramework("IFileSystem"), backend(std::move(backend)) {
|
: ServiceFramework("IFileSystem"), backend(std::move(backend)), size(std::move(size)) {
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{0, &IFileSystem::CreateFile, "CreateFile"},
|
{0, &IFileSystem::CreateFile, "CreateFile"},
|
||||||
{1, &IFileSystem::DeleteFile, "DeleteFile"},
|
{1, &IFileSystem::DeleteFile, "DeleteFile"},
|
||||||
|
@ -467,8 +479,25 @@ public:
|
||||||
rb.Push(RESULT_SUCCESS);
|
rb.Push(RESULT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GetFreeSpaceSize(Kernel::HLERequestContext& ctx) {
|
||||||
|
LOG_DEBUG(Service_FS, "called");
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 4};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
rb.Push(size.free());
|
||||||
|
}
|
||||||
|
|
||||||
|
void GetTotalSpaceSize(Kernel::HLERequestContext& ctx) {
|
||||||
|
LOG_DEBUG(Service_FS, "called");
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 4};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
rb.Push(size.total());
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
VfsDirectoryServiceWrapper backend;
|
VfsDirectoryServiceWrapper backend;
|
||||||
|
SizeGetter size;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ISaveDataInfoReader final : public ServiceFramework<ISaveDataInfoReader> {
|
class ISaveDataInfoReader final : public ServiceFramework<ISaveDataInfoReader> {
|
||||||
|
|
Reference in New Issue