Skip to content

Commit

Permalink
Remove C#12 usage
Browse files Browse the repository at this point in the history
  • Loading branch information
valters-tomsons committed May 17, 2024
1 parent eda1494 commit d598296
Showing 1 changed file with 12 additions and 6 deletions.
18 changes: 12 additions & 6 deletions src/DayZLauncher.UnixPatcher/Patches/UtilsAssemblyPatcher.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,31 @@ namespace DayZLauncher.UnixPatcher.Patches;

public static class UtilsAssemblyPatcher
{
private static readonly Dictionary<string, OpCode[]> FunctionsArguments = new() {
{"Create", new OpCode[] {OpCodes.Ldarg_0, OpCodes.Ldarg_1, OpCodes.Ldarg_2}},
{"Delete", new OpCode[] {OpCodes.Ldarg_0}},
{"Exists", new OpCode[] {OpCodes.Ldarg_0}},
{"GetTarget", new OpCode[] {OpCodes.Ldarg_0}},
};

public static AssemblyDefinition PatchAssembly(string sourcePath, string payloadPath)
{
using var utilsPatchDef = AssemblyDefinition.ReadAssembly(payloadPath);
var unixJunctionsTypeDef = utilsPatchDef.MainModule.GetType("DayZLauncher.UnixPatcher.Utils.UnixJunctions");

var targetDef = AssemblyDefinition.ReadAssembly(sourcePath);
var unixJunctionsImport = targetDef.MainModule.ImportReference(unixJunctionsTypeDef);

var targetJunctionsTypeDef = targetDef.MainModule.GetType("Utils.IO.Junctions");

PatchJunctionsMethod(unixJunctionsTypeDef, targetDef, targetJunctionsTypeDef, "Create", [OpCodes.Ldarg_0, OpCodes.Ldarg_1, OpCodes.Ldarg_2]);
PatchJunctionsMethod(unixJunctionsTypeDef, targetDef, targetJunctionsTypeDef, "Delete", [OpCodes.Ldarg_0]);
PatchJunctionsMethod(unixJunctionsTypeDef, targetDef, targetJunctionsTypeDef, "Exists", [OpCodes.Ldarg_0]);
PatchJunctionsMethod(unixJunctionsTypeDef, targetDef, targetJunctionsTypeDef, "GetTarget", [OpCodes.Ldarg_0]);
foreach (var def in FunctionsArguments)
{
PatchJunctionsMethod(unixJunctionsTypeDef, targetDef, targetJunctionsTypeDef, def.Key, def.Value);
}

return targetDef;
}

private static void PatchJunctionsMethod(TypeDefinition unixJunctionsType, AssemblyDefinition targetDefinition, TypeDefinition junctionsClass, string methodName, List<OpCode> args)
private static void PatchJunctionsMethod(TypeDefinition unixJunctionsType, AssemblyDefinition targetDefinition, TypeDefinition junctionsClass, string methodName, IEnumerable<OpCode> args)
{
var originalMethod = junctionsClass.Methods.FirstOrDefault(m => m.Name == methodName);
var patchedMethod = unixJunctionsType.Methods.FirstOrDefault(m => m.Name == methodName);
Expand Down

0 comments on commit d598296

Please sign in to comment.