summaryrefslogtreecommitdiffstats
path: root/vendor/cc/src/bin/gcc-shim.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/cc/src/bin/gcc-shim.rs')
-rw-r--r--vendor/cc/src/bin/gcc-shim.rs68
1 files changed, 45 insertions, 23 deletions
diff --git a/vendor/cc/src/bin/gcc-shim.rs b/vendor/cc/src/bin/gcc-shim.rs
index 1731df82e..e5b537258 100644
--- a/vendor/cc/src/bin/gcc-shim.rs
+++ b/vendor/cc/src/bin/gcc-shim.rs
@@ -2,7 +2,7 @@
use std::env;
use std::fs::File;
-use std::io::prelude::*;
+use std::io::{self, prelude::*};
use std::path::PathBuf;
fn main() {
@@ -10,39 +10,61 @@ fn main() {
let program = args.next().expect("Unexpected empty args");
let out_dir = PathBuf::from(
- env::var_os("GCCTEST_OUT_DIR").expect(&format!("{}: GCCTEST_OUT_DIR not found", program)),
+ env::var_os("GCCTEST_OUT_DIR")
+ .unwrap_or_else(|| panic!("{}: GCCTEST_OUT_DIR not found", program)),
);
// Find the first nonexistent candidate file to which the program's args can be written.
- for i in 0.. {
- let candidate = &out_dir.join(format!("out{}", i));
+ let candidate = (0..).find_map(|i| {
+ let candidate = out_dir.join(format!("out{}", i));
- // If the file exists, commands have already run. Try again.
if candidate.exists() {
- continue;
+ // If the file exists, commands have already run. Try again.
+ None
+ } else {
+ Some(candidate)
}
+ }).unwrap_or_else(|| panic!("Cannot find the first nonexistent candidate file to which the program's args can be written under out_dir '{}'", out_dir.display()));
- // Create a file and record the args passed to the command.
- let mut f = File::create(candidate).expect(&format!(
- "{}: can't create candidate: {}",
+ // Create a file and record the args passed to the command.
+ let f = File::create(&candidate).unwrap_or_else(|e| {
+ panic!(
+ "{}: can't create candidate: {}, error: {}",
program,
- candidate.to_string_lossy()
- ));
+ candidate.display(),
+ e
+ )
+ });
+ let mut f = io::BufWriter::new(f);
+
+ (|| {
for arg in args {
- writeln!(f, "{}", arg).expect(&format!(
- "{}: can't write to candidate: {}",
- program,
- candidate.to_string_lossy()
- ));
+ writeln!(f, "{}", arg)?;
}
- break;
- }
+
+ f.flush()?;
+
+ let mut f = f.into_inner()?;
+ f.flush()?;
+ f.sync_all()
+ })()
+ .unwrap_or_else(|e| {
+ panic!(
+ "{}: can't write to candidate: {}, error: {}",
+ program,
+ candidate.display(),
+ e
+ )
+ });
// Create a file used by some tests.
let path = &out_dir.join("libfoo.a");
- File::create(path).expect(&format!(
- "{}: can't create libfoo.a: {}",
- program,
- path.to_string_lossy()
- ));
+ File::create(path).unwrap_or_else(|e| {
+ panic!(
+ "{}: can't create libfoo.a: {}, error: {}",
+ program,
+ path.display(),
+ e
+ )
+ });
}