From abd7b32bfc64f9b22a695a8ff45eca983e4164d6 Mon Sep 17 00:00:00 2001 From: Nathan Froyd Date: Fri, 18 May 2018 11:32:47 -0400 Subject: [PATCH] add an undname binary c++filt is a useful tool to have for shell pipelines and whatnot. No reason we shouldn't have an MSVC-alike. --- Cargo.toml | 3 +++ src/bin/undname.rs | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 src/bin/undname.rs 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); + } +}