|
|
@@ -30,6 +30,18 @@
|
|
|
|
|
|
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 {
|
|
|
Invalid0 = 0,
|
|
|
Invalid1 = 1,
|
|
|
@@ -289,8 +301,8 @@ private:
|
|
|
|
|
|
class IFileSystem final : public ServiceFramework<IFileSystem> {
|
|
|
public:
|
|
|
- explicit IFileSystem(FileSys::VirtualDir backend)
|
|
|
- : ServiceFramework("IFileSystem"), backend(std::move(backend)) {
|
|
|
+ explicit IFileSystem(FileSys::VirtualDir backend, SizeGetter size)
|
|
|
+ : ServiceFramework("IFileSystem"), backend(std::move(backend)), size(std::move(size)) {
|
|
|
static const FunctionInfo functions[] = {
|
|
|
{0, &IFileSystem::CreateFile, "CreateFile"},
|
|
|
{1, &IFileSystem::DeleteFile, "DeleteFile"},
|
|
|
@@ -467,8 +479,25 @@ public:
|
|
|
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:
|
|
|
VfsDirectoryServiceWrapper backend;
|
|
|
+ SizeGetter size;
|
|
|
};
|
|
|
|
|
|
class ISaveDataInfoReader final : public ServiceFramework<ISaveDataInfoReader> {
|