diff --git a/Cargo.toml b/Cargo.toml index 5ec780d..d1359a1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,3 +10,6 @@ repository = "https://github.com/mstange/msvc-demangler-rust" [dependencies] bitflags = "1.0.1" + +[[bin]] +name = "undname" diff --git a/src/bin/undname.rs b/src/bin/undname.rs new file mode 100644 index 0000000..5390d0a --- /dev/null +++ b/src/bin/undname.rs @@ -0,0 +1,38 @@ +extern crate msvc_demangler; + +use std::env; +use std::io; +use std::io::BufRead; + +fn main() { + let args = env::args(); + + let print_demangled = |sym: &str| { + let demangled = msvc_demangler::demangle(&sym, msvc_demangler::DemangleFlags::LotsOfWhitespace); + match demangled { + Ok(ref string) => println!("{}", string), + _ => println!("{}", sym), + } + }; + + if args.len() == 1 { + let stdin = io::stdin(); + let handle = stdin.lock(); + + for line in handle.lines() { + match line { + Ok(line) => print_demangled(&line), + _ => continue, + } + } + return; + } + + for (i, arg) in env::args().enumerate() { + if i == 0 { + continue; + } + + print_demangled(&arg); + } +}