mirror of
https://github.com/Atmosphere-NX/Atmosphere.git
synced 2024-12-23 18:56:03 +00:00
ad636f7216
* Stratosphere: Use modern C++ idioms in some places * algorithms like std::for_each are used instead of raw loops * Stratosphere: Replace more raw loops with algorithms * Stratosphere: Add a utility predicate function to test for equality with a reference element This can be used to rewrite some common raw loops using algorithms instead * fs.mitm: Use variant * fs.mitm: Use enum class * fs.mitm: Turn RomFSSourceInfo::Cleanup into a destructor This obsoletes the need for a custom deleter in other places * fs.mitm: Use enum class some more * fs.mitm: Use unique_ptr * fs.mitm: Simplify initialization * Stratosphere: Simplify initialization * fs.mitm: Use unique_ptr (fix memory leak along the way) The previous code was using "delete" rather than "delete[]" * fs.mitm: Use vector::emplace_back rather than push_back emplace_back constructs elements in-place, hence avoiding a redundant element copy. * Stratosphere: Replace more raw loops with algorithms * Stratosphere: Use unique_ptr * fs.mitm: Replace more raw loops with algorithms * Stratosphere: Prefer move-construction over copy-construction when moving sink parameters around
46 lines
1.6 KiB
C++
46 lines
1.6 KiB
C++
#pragma once
|
|
#include <switch.h>
|
|
#include <stratosphere/iserviceobject.hpp>
|
|
#include "imitmserviceobject.hpp"
|
|
#include "fs_istorage.hpp"
|
|
|
|
enum class FspSrvCmd {
|
|
SetCurrentProcess = 1,
|
|
OpenDataStorageByCurrentProcess = 200,
|
|
OpenDataStorageByDataId = 202,
|
|
};
|
|
|
|
class FsMitMService : public IMitMServiceObject {
|
|
private:
|
|
bool has_initialized;
|
|
u64 init_pid;
|
|
public:
|
|
FsMitMService(Service *s) : IMitMServiceObject(s), has_initialized(false), init_pid(0) {
|
|
/* ... */
|
|
}
|
|
|
|
static bool should_mitm(u64 pid, u64 tid) {
|
|
return tid >= 0x0100000000010000ULL;
|
|
}
|
|
|
|
FsMitMService *clone() override {
|
|
auto new_srv = new FsMitMService((Service *)&this->forward_service);
|
|
this->clone_to(new_srv);
|
|
return new_srv;
|
|
}
|
|
|
|
void clone_to(void *o) override {
|
|
FsMitMService *other = (FsMitMService *)o;
|
|
other->has_initialized = has_initialized;
|
|
other->init_pid = init_pid;
|
|
}
|
|
|
|
virtual Result dispatch(IpcParsedCommand &r, IpcCommand &out_c, u64 cmd_id, u8 *pointer_buffer, size_t pointer_buffer_size);
|
|
virtual void postprocess(IpcParsedCommand &r, IpcCommand &out_c, u64 cmd_id, u8 *pointer_buffer, size_t pointer_buffer_size);
|
|
virtual Result handle_deferred();
|
|
|
|
protected:
|
|
/* Overridden commands. */
|
|
std::tuple<Result, OutSession<IStorageInterface>> open_data_storage_by_current_process();
|
|
std::tuple<Result, OutSession<IStorageInterface>> open_data_storage_by_data_id(u64 storage_id, u64 data_id);
|
|
};
|