1 use std::{env, fs, process};
2
main()3 fn main() {
4 let mut args = env::args().skip(1);
5 if args.len() < 2 {
6 eprintln!(
7 "Usage: {} <op> <archive> [<member>...]",
8 env::args().next().unwrap()
9 );
10 process::exit(1);
11 }
12
13 let op = args.next().unwrap();
14 let file_path = args.next().unwrap();
15
16 let file = match fs::File::open(&file_path) {
17 Ok(file) => file,
18 Err(err) => {
19 println!("Failed to open file '{}': {}", file_path, err,);
20 return;
21 }
22 };
23 let file = match unsafe { memmap::Mmap::map(&file) } {
24 Ok(mmap) => mmap,
25 Err(err) => {
26 println!("Failed to map file '{}': {}", file_path, err,);
27 return;
28 }
29 };
30 let archive = match object::read::archive::ArchiveFile::parse(&*file) {
31 Ok(file) => file,
32 Err(err) => {
33 println!("Failed to parse file '{}': {}", file_path, err);
34 return;
35 }
36 };
37 match op.chars().next().unwrap() {
38 't' => {
39 for member in archive.members() {
40 let member = member.unwrap();
41 println!("{}", String::from_utf8_lossy(member.name()));
42 }
43 }
44 op => println!("Invalid operation: {}", op),
45 }
46 }
47