mirror of https://github.com/yuzu-emu/yuzu
78 lines
2.2 KiB
C++
78 lines
2.2 KiB
C++
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
#pragma once
|
|
|
|
#include "core/file_sys/fssrv/impl/fssrv_access_control.h"
|
|
#include "core/file_sys/romfs_factory.h"
|
|
|
|
namespace Core {
|
|
class System;
|
|
}
|
|
|
|
namespace FileSys::FsSrv::Impl {
|
|
|
|
constexpr u64 InvalidProcessId = 0xffffffffffffffffULL;
|
|
|
|
class ProgramInfo {
|
|
private:
|
|
u64 m_process_id;
|
|
u64 m_program_id;
|
|
FileSys::StorageId m_storage_id;
|
|
AccessControl m_access_control;
|
|
|
|
public:
|
|
ProgramInfo(u64 process_id, u64 program_id, u8 storage_id, const void* data, s64 data_size,
|
|
const void* desc, s64 desc_size)
|
|
: m_process_id(process_id), m_access_control(data, data_size, desc, desc_size) {
|
|
m_program_id = program_id;
|
|
m_storage_id = static_cast<FileSys::StorageId>(storage_id);
|
|
}
|
|
|
|
ProgramInfo(const void* data, s64 data_size, const void* desc, s64 desc_size)
|
|
: m_process_id(InvalidProcessId), m_program_id(0),
|
|
m_storage_id(static_cast<FileSys::StorageId>(0)),
|
|
m_access_control(data, data_size, desc, desc_size, std::numeric_limits<u64>::max()) {}
|
|
|
|
bool Contains(u64 process_id) const {
|
|
return m_process_id == process_id;
|
|
}
|
|
u64 GetProcessId() const {
|
|
return m_process_id;
|
|
}
|
|
u64 GetProgramId() const {
|
|
return m_program_id;
|
|
}
|
|
FileSys::StorageId GetStorageId() const {
|
|
return m_storage_id;
|
|
}
|
|
AccessControl& GetAccessControl() {
|
|
return m_access_control;
|
|
}
|
|
};
|
|
|
|
struct ProgramInfoNode : public Common::IntrusiveListBaseNode<ProgramInfoNode> {
|
|
std::shared_ptr<ProgramInfo> program_info;
|
|
};
|
|
|
|
class InitialProgramInfo {
|
|
private:
|
|
void InitializeInitialAndCurrentProcessId(Core::System& system);
|
|
|
|
public:
|
|
std::shared_ptr<ProgramInfo> GetProgramInfoForInitialProcess();
|
|
bool IsInitialProgram(Core::System& system, u64 process_id);
|
|
bool IsCurrentProcess(Core::System& system, u64 process_id);
|
|
|
|
private:
|
|
std::shared_ptr<ProgramInfo> initial_program_info = nullptr;
|
|
|
|
bool initialized_ids = false;
|
|
|
|
u64 initial_process_id_min = 0;
|
|
u64 initial_process_id_max = 0;
|
|
u64 current_process_id = 0;
|
|
};
|
|
|
|
} // namespace FileSys::FsSrv::Impl
|