mirror of
https://github.com/Lime3DS/Lime3DS
synced 2025-01-07 12:43:15 +00:00
a6d9baa05a
To eliminate System::GetInstance usage. Archive type like SelfNCCH and SaveData changes the actual reference path for different client, so archive backend interface should accept client information from the service interface. Currently we only pass the program ID as the client information.
73 lines
2.6 KiB
C++
73 lines
2.6 KiB
C++
// Copyright 2016 Citra Emulator Project
|
|
// Licensed under GPLv2 or any later version
|
|
// Refer to the license.txt file included.
|
|
|
|
#include <memory>
|
|
#include "common/file_util.h"
|
|
#include "core/file_sys/archive_sdmcwriteonly.h"
|
|
#include "core/file_sys/directory_backend.h"
|
|
#include "core/file_sys/errors.h"
|
|
#include "core/file_sys/file_backend.h"
|
|
#include "core/settings.h"
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// FileSys namespace
|
|
|
|
namespace FileSys {
|
|
|
|
ResultVal<std::unique_ptr<FileBackend>> SDMCWriteOnlyArchive::OpenFile(const Path& path,
|
|
const Mode& mode) const {
|
|
if (mode.read_flag) {
|
|
LOG_ERROR(Service_FS, "Read flag is not supported");
|
|
return ERROR_INVALID_READ_FLAG;
|
|
}
|
|
return SDMCArchive::OpenFileBase(path, mode);
|
|
}
|
|
|
|
ResultVal<std::unique_ptr<DirectoryBackend>> SDMCWriteOnlyArchive::OpenDirectory(
|
|
const Path& path) const {
|
|
LOG_ERROR(Service_FS, "Not supported");
|
|
return ERROR_UNSUPPORTED_OPEN_FLAGS;
|
|
}
|
|
|
|
ArchiveFactory_SDMCWriteOnly::ArchiveFactory_SDMCWriteOnly(const std::string& mount_point)
|
|
: sdmc_directory(mount_point) {
|
|
LOG_DEBUG(Service_FS, "Directory {} set as SDMCWriteOnly.", sdmc_directory);
|
|
}
|
|
|
|
bool ArchiveFactory_SDMCWriteOnly::Initialize() {
|
|
if (!Settings::values.use_virtual_sd) {
|
|
LOG_WARNING(Service_FS, "SDMC disabled by config.");
|
|
return false;
|
|
}
|
|
|
|
if (!FileUtil::CreateFullPath(sdmc_directory)) {
|
|
LOG_ERROR(Service_FS, "Unable to create SDMC path.");
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
ResultVal<std::unique_ptr<ArchiveBackend>> ArchiveFactory_SDMCWriteOnly::Open(const Path& path,
|
|
u64 program_id) {
|
|
auto archive = std::make_unique<SDMCWriteOnlyArchive>(sdmc_directory);
|
|
return MakeResult<std::unique_ptr<ArchiveBackend>>(std::move(archive));
|
|
}
|
|
|
|
ResultCode ArchiveFactory_SDMCWriteOnly::Format(const Path& path,
|
|
const FileSys::ArchiveFormatInfo& format_info,
|
|
u64 program_id) {
|
|
// TODO(wwylele): hwtest this
|
|
LOG_ERROR(Service_FS, "Attempted to format a SDMC write-only archive.");
|
|
return ResultCode(-1);
|
|
}
|
|
|
|
ResultVal<ArchiveFormatInfo> ArchiveFactory_SDMCWriteOnly::GetFormatInfo(const Path& path,
|
|
u64 program_id) const {
|
|
// TODO(Subv): Implement
|
|
LOG_ERROR(Service_FS, "Unimplemented GetFormatInfo archive {}", GetName());
|
|
return ResultCode(-1);
|
|
}
|
|
|
|
} // namespace FileSys
|