public static void Main(string [] args) { var solitary = new Solitary (); bool show_help = false; string blacklist_file = null; List<string> paths = null; var p = new OptionSet () { { "p|mono-prefix=", "set the mono prefix (e.g. to find etc/mono/config)", v => solitary.MonoPrefix = v }, { "r|root=", "set the confinement root - any files outside of the root will be ignored", v => solitary.ConfinementRoot = v }, { "o|out=", "directory into which the bundle should be placed", v => solitary.OutputPath = v }, { "b|blacklist=", "blacklist file to exclude native libraries from the summary", v => blacklist_file = v }, { "h|help", "show this message and exit", v => show_help = v != null } }; try { paths = p.Parse (args); } catch (OptionException e) { Console.Write ("Solitary: "); Console.WriteLine (e.Message); Console.WriteLine ("Try --help for more information"); return; } if (show_help || paths.Count == 0) { Console.WriteLine ("Usage: solitary [OPTIONS]+ <paths>..."); Console.WriteLine (); Console.WriteLine ("Options:"); p.WriteOptionDescriptions (Console.Out); Console.WriteLine (); return; } solitary.LoadPathBlacklist (blacklist_file); long total_size = 0; Console.WriteLine ("Locating items..."); foreach (var path in paths) { foreach (var item in solitary.Walk (path)) { foreach (var collect_item in item.Load ()) { solitary.Items.Add (collect_item); total_size += collect_item.File.Length; Console.WriteLine (" + {0} ({1} - {2} KB)", collect_item.File.Name, collect_item.GetType ().Name, collect_item.File.Length / 1024); } } } Console.WriteLine ("Done locating items. Total size is {0} KB.", total_size / 1024); Console.WriteLine ("Creating bundle..."); solitary.CreateBundle (true); Console.WriteLine ("Done."); }
public static Item Resolve(Solitary confinement, FileInfo file) { if (!file.Exists || file.Name.StartsWith(".")) { return(null); } Item item = null; foreach (var regex in confinement.PathBlacklist) { if (regex.IsMatch(file.FullName)) { return(null); } } if (!String.IsNullOrEmpty(ProcessTools.RealConfinementRoot) && file.FullName.StartsWith(ProcessTools.RealConfinementRoot)) { string path = file.FullName.Replace(ProcessTools.RealConfinementRoot, confinement.ConfinementRoot); file = new FileInfo(path); } if (SymlinkItem.IsSymlink(file.FullName)) { return(new SymlinkItem() { File = file, Confinement = confinement }); } switch (GetFileType(file)) { case FileType.PE32Executable: item = new AssemblyItem(); break; case FileType.MachO: case FileType.ELF: item = new NativeLibraryItem(); break; default: item = new DataItem(); break; } item.Confinement = confinement; item.File = file; return(item); }
public static Item Resolve(Solitary confinement, string path) { return(Resolve(confinement, new FileInfo(path))); }
public AssemblyItem(Solitary confinement, Assembly assembly) : this(confinement) { Assembly = assembly; PreLoad(); }
private AssemblyItem(Solitary confinement) { Confinement = confinement; }
public DataItem(Solitary confinement, FileInfo file) { Confinement = confinement; File = file; }
public AssemblyItem(Solitary confinement, FileInfo file) : this(confinement) { File = file; PreLoad(); }
public static Item Resolve(Solitary confinement, FileInfo file) { if (!file.Exists || file.Name.StartsWith (".")) { return null; } Item item = null; foreach (var regex in confinement.PathBlacklist) { if (regex.IsMatch (file.FullName)) { return null; } } if (SymlinkItem.IsSymlink (file.FullName)) { return new SymlinkItem () { File = file, Confinement = confinement }; } switch (GetFileType (file)) { case FileType.PE32Executable: item = new AssemblyItem (); break; case FileType.MachO: item = new NativeLibraryItem (); break; default: item = new DataItem (); break; } item.Confinement = confinement; item.File = file; return item; }
public static Item Resolve(Solitary confinement, string path) { return Resolve (confinement, new FileInfo (path)); }
public static void Main(string [] args) { var solitary = new Solitary(); bool show_help = false; string blacklist_file = null; List <string> paths = null; var p = new OptionSet() { { "p|mono-prefix=", "set the mono prefix (e.g. to find etc/mono/config)", v => solitary.MonoPrefix = v }, { "r|root=", "set the confinement root - any files outside of the root will be ignored", v => solitary.ConfinementRoot = v }, { "o|out=", "directory into which the bundle should be placed", v => solitary.OutputPath = v }, { "b|blacklist=", "blacklist file to exclude native libraries from the summary", v => blacklist_file = v }, { "h|help", "show this message and exit", v => show_help = v != null } }; try { paths = p.Parse(args); } catch (OptionException e) { Console.Write("Solitary: "); Console.WriteLine(e.Message); Console.WriteLine("Try --help for more information"); return; } if (show_help || paths.Count == 0) { Console.WriteLine("Usage: solitary [OPTIONS]+ <paths>..."); Console.WriteLine(); Console.WriteLine("Options:"); p.WriteOptionDescriptions(Console.Out); Console.WriteLine(); return; } solitary.LoadPathBlacklist(blacklist_file); long total_size = 0; Console.WriteLine("Locating items..."); foreach (var path in paths) { foreach (var item in solitary.Walk(path)) { foreach (var collect_item in item.Load()) { solitary.Items.Add(collect_item); total_size += collect_item.File.Length; Console.WriteLine(" + {0} ({1} - {2} KB)", collect_item.File.Name, collect_item.GetType().Name, collect_item.File.Length / 1024); } } } Console.WriteLine("Done locating items. Total size is {0} KB.", total_size / 1024); Console.WriteLine("Items out of confinement :"); foreach (KeyValuePair <string, int> item in solitary.EscapedItems) { Console.WriteLine(String.Format(" {0} ({1})", item.Key, item.Value)); } Console.WriteLine("Creating bundle..."); solitary.CreateBundle(true); Console.WriteLine("Done."); }
public NativeLibraryItem(Solitary confinement, FileInfo file) { Confinement = confinement; File = file; }
public static Item Resolve(Solitary confinement, FileInfo file) { if (!file.Exists || file.Name.StartsWith (".")) { return null; } Item item = null; foreach (var regex in confinement.PathBlacklist) { if (regex.IsMatch (file.FullName)) { return null; } } if (!String.IsNullOrEmpty (ProcessTools.RealConfinementRoot) && file.FullName.StartsWith (ProcessTools.RealConfinementRoot)) { string path = file.FullName.Replace (ProcessTools.RealConfinementRoot, confinement.ConfinementRoot); file = new FileInfo (path); } if (SymlinkItem.IsSymlink (file.FullName)) { return new SymlinkItem () { File = file, Confinement = confinement }; } switch (GetFileType (file)) { case FileType.PE32Executable: item = new AssemblyItem (); break; case FileType.MachO: case FileType.ELF: item = new NativeLibraryItem (); break; default: item = new DataItem (); break; } item.Confinement = confinement; item.File = file; return item; }