From 219736651d0022908322fd385a8ccd14cab5496e Mon Sep 17 00:00:00 2001 From: de4dot Date: Sat, 8 Dec 2012 12:13:21 +0100 Subject: [PATCH] Update --preserve-table argument to allow 'all' and to disable table(s) --- de4dot.cui/CommandLineParser.cs | 40 +++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/de4dot.cui/CommandLineParser.cs b/de4dot.cui/CommandLineParser.cs index 05105f3c..1225355c 100644 --- a/de4dot.cui/CommandLineParser.cs +++ b/de4dot.cui/CommandLineParser.cs @@ -169,23 +169,35 @@ namespace de4dot.cui { MetaDataFlags.PreserveBlobOffsets | MetaDataFlags.PreserveExtraSignatureData; })); - miscOptions.Add(new OneArgOption(null, "preserve-table", "Preserve rids in table: tr (TypeRef), td (TypeDef), fd (Field), md (Method), pd (Param), mr (MemberRef), s (StandAloneSig), ed (Event), pr (Property), ts (TypeSpec), ms (MethodSpec). Can be combined: ed,fd,md", "flags", (val) => { - foreach (var s in val.Split(',')) { + miscOptions.Add(new OneArgOption(null, "preserve-table", "Preserve rids in table: tr (TypeRef), td (TypeDef), fd (Field), md (Method), pd (Param), mr (MemberRef), s (StandAloneSig), ed (Event), pr (Property), ts (TypeSpec), ms (MethodSpec), all (all previous tables). Use - to disable (eg. all,-pd). Can be combined: ed,fd,md", "flags", (val) => { + foreach (var t in val.Split(',')) { + var s = t.Trim(); + if (s.Length == 0) + continue; + bool clear = s[0] == '-'; + if (clear) + s = s.Substring(1); + MetaDataFlags flag; switch (s.Trim()) { - case "": break; - case "tr": filesOptions.MetaDataFlags |= MetaDataFlags.PreserveTypeRefRids; break; - case "td": filesOptions.MetaDataFlags |= MetaDataFlags.PreserveTypeDefRids; break; - case "fd": filesOptions.MetaDataFlags |= MetaDataFlags.PreserveFieldRids; break; - case "md": filesOptions.MetaDataFlags |= MetaDataFlags.PreserveMethodRids; break; - case "pd": filesOptions.MetaDataFlags |= MetaDataFlags.PreserveParamRids; break; - case "mr": filesOptions.MetaDataFlags |= MetaDataFlags.PreserveMemberRefRids; break; - case "s": filesOptions.MetaDataFlags |= MetaDataFlags.PreserveStandAloneSigRids; break; - case "ed": filesOptions.MetaDataFlags |= MetaDataFlags.PreserveEventRids; break; - case "pr": filesOptions.MetaDataFlags |= MetaDataFlags.PreservePropertyRids; break; - case "ts": filesOptions.MetaDataFlags |= MetaDataFlags.PreserveTypeSpecRids; break; - case "ms": filesOptions.MetaDataFlags |= MetaDataFlags.PreserveMethodSpecRids; break; + case "": flag = 0; break; + case "all": flag = MetaDataFlags.PreserveRids; break; + case "tr": flag = MetaDataFlags.PreserveTypeRefRids; break; + case "td": flag = MetaDataFlags.PreserveTypeDefRids; break; + case "fd": flag = MetaDataFlags.PreserveFieldRids; break; + case "md": flag = MetaDataFlags.PreserveMethodRids; break; + case "pd": flag = MetaDataFlags.PreserveParamRids; break; + case "mr": flag = MetaDataFlags.PreserveMemberRefRids; break; + case "s": flag = MetaDataFlags.PreserveStandAloneSigRids; break; + case "ed": flag = MetaDataFlags.PreserveEventRids; break; + case "pr": flag = MetaDataFlags.PreservePropertyRids; break; + case "ts": flag = MetaDataFlags.PreserveTypeSpecRids; break; + case "ms": flag = MetaDataFlags.PreserveMethodSpecRids; break; default: throw new UserException(string.Format("Invalid --preserve-table option: {0}", s)); } + if (clear) + filesOptions.MetaDataFlags &= ~flag; + else + filesOptions.MetaDataFlags |= flag; } })); miscOptions.Add(new NoArgOption(null, "preserve-strings", "Preserve #Strings heap offsets", () => {