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