diff options
-rw-r--r-- | src/backends/clang.rs | 13 | ||||
-rw-r--r-- | src/backends/mod.rs | 27 | ||||
-rw-r--r-- | src/backends/python.rs | 1 |
3 files changed, 5 insertions, 36 deletions
diff --git a/src/backends/clang.rs b/src/backends/clang.rs index 6248218..4259546 100644 --- a/src/backends/clang.rs +++ b/src/backends/clang.rs @@ -2,10 +2,9 @@ use serde_derive::{ Serialize, Deserialize }; use crate::backends::{ Backend, mk_tmp_dir, RunStatus }; use std::path::{ Path, PathBuf }; use std::io::{ Result, Error, ErrorKind }; -use std::process::Command; +use std::process::{ Command }; use std::collections::hash_map::DefaultHasher; use std::hash::{Hash, Hasher}; -use log::trace; #[derive(Debug, Serialize, Deserialize, Default)] @@ -48,14 +47,12 @@ impl ClangBackend { if src_mod.is_err() || binary_mod.is_err() || src_mod.unwrap() > binary_mod.unwrap() { let clang_status = Command::new(&self.cc) - .args(&self.args) .arg("-x").arg("c++") .arg(fname.as_os_str()) .arg("-o").arg(&binary_fname) - .arg("-lstdc++") + .args(&self.args) .status()?; - - trace!("{:#?}", clang_status); + if !clang_status.success() { return Err(Error::new(ErrorKind::Other, "could not compile")); @@ -79,7 +76,6 @@ impl Backend for ClangBackend { let binary_fname = self.build(fname)?; let binary_proc = Command::new(&binary_fname) - .stdin(self.get_stdin(fname)) .spawn()?; get_status(binary_proc) @@ -87,7 +83,7 @@ impl Backend for ClangBackend { } use nix::sys::wait; - + #[cfg(unix)] fn get_status(proc: std::process::Child) -> Result<RunStatus> { let id = proc.id() as i32; // for fuck sake, why this emits u32? @@ -97,6 +93,7 @@ fn get_status(proc: std::process::Child) -> Result<RunStatus> { .map_err(|err| Error::new(ErrorKind::Other, err)); let status = status_result?; + match status { wait::WaitStatus::Exited(pid, code) => { assert_eq!(pid.as_raw(), id); diff --git a/src/backends/mod.rs b/src/backends/mod.rs index 010c4d9..0af1bb1 100644 --- a/src/backends/mod.rs +++ b/src/backends/mod.rs @@ -3,9 +3,6 @@ use std::env::temp_dir; use lazy_static::lazy_static; use std::io::{ Error, ErrorKind, Result }; use nix::sys::signal::Signal as NixSignal; -use std::process::Stdio; -use std::fs::File; -use log::warn; pub mod python; pub mod clang; @@ -28,30 +25,6 @@ pub trait Backend { fn get_template(&self) -> Option<&str>; fn run(&self, fname: &Path) -> Result<RunStatus>; - - fn try_guess_test_file(&self, fname: &Path) -> Option<PathBuf> { - let maybe_test = fname.with_extension("txt"); - if maybe_test.exists() { - return Some(maybe_test); - } - None - } - - fn get_stdin(&self, fname: &Path) -> Stdio { - match self.try_guess_test_file(fname) { - Some(test_filename) => match File::open(&test_filename) { - Ok(test_content) => { - println!("Using {}", test_filename.as_path().display()); - Stdio::from(test_content) - }, - Err(err) => { - warn!("Could not open test file. Fallback to piped: {}", err); - Stdio::piped() - } - }, - None => Stdio::piped() - } - } } fn mk_tmp_dir() -> Result<&'static std::path::PathBuf> { diff --git a/src/backends/python.rs b/src/backends/python.rs index f1d0e4d..66402b9 100644 --- a/src/backends/python.rs +++ b/src/backends/python.rs @@ -38,7 +38,6 @@ impl Backend for PythonBackend { let mut child = Command::new(self.get_interpreter()) .arg(fname.as_os_str()) - .stdin(self.get_stdin(fname)) .spawn()?; let timeout = std::time::Duration::from_secs_f32(self.timeout.unwrap_or(1.0)); |