#pragma once #include #include #include #include #include #include #include using namespace std; template void fork_execl(Args... args) { int pid, status; if ((pid = fork()) == 0) { execl(args..., nullptr); } else { waitpid(pid, &status, 0); } } class DeviceQuirk { public: DeviceQuirk(); virtual bool ShouldRun() = 0; virtual void Run() = 0; virtual ~DeviceQuirk(); }; namespace Quirks { void Add(DeviceQuirk* quirk); void Run(); void OverrideFileWith(filesystem::path p, function proc); void OverrideFileReplaceSubstr(filesystem::path p, string pattern, string replacement); void OverrideFolderWith(filesystem::path p, function proc); void CopyFileKeepPerms(filesystem::path src, filesystem::path dst); }