about summary refs log tree commit diff
diff options
context:
space:
mode:
authorCengiz Can <cengizc@gmail.com>2017-07-03 01:34:25 +0300
committerCengiz Can <cengizc@gmail.com>2017-07-03 14:13:02 +0300
commit0e18a9cd55826eca5f2804a06527541140a71925 (patch)
tree072a20b6569f1efed77b2d3de5f67147b7e1124d
parent7b0a7fdaf250ba5b5c436c8de9aacf94b519b57f (diff)
downloadrust-0e18a9cd55826eca5f2804a06527541140a71925.tar.gz
rust-0e18a9cd55826eca5f2804a06527541140a71925.zip
use embedded implementation instead of istty crate
-rw-r--r--src/librustc_driver/lib.rs32
1 files changed, 29 insertions, 3 deletions
diff --git a/src/librustc_driver/lib.rs b/src/librustc_driver/lib.rs
index 2ecbb89361e..934015c9536 100644
--- a/src/librustc_driver/lib.rs
+++ b/src/librustc_driver/lib.rs
@@ -56,7 +56,6 @@ extern crate log;
 extern crate syntax;
 extern crate syntax_ext;
 extern crate syntax_pos;
-extern crate isatty;
 
 use driver::CompileController;
 use pretty::{PpMode, UserIdentifiedItem};
@@ -101,8 +100,6 @@ use syntax::feature_gate::{GatedCfg, UnstableFeatures};
 use syntax::parse::{self, PResult};
 use syntax_pos::{DUMMY_SP, MultiSpan};
 
-use isatty::stdout_isatty;
-
 #[cfg(test)]
 pub mod test;
 
@@ -347,6 +344,35 @@ pub trait CompilerCalls<'a> {
 #[derive(Copy, Clone)]
 pub struct RustcDefaultCalls;
 
+/**
+ * TODO remove these and use winapi 0.3 instead
+ *
+ * These are duplicated in
+ *   - bootstrap/compile.rs#L478
+ *   - librustc_errors/emitter.rs#L1253
+ */
+#[cfg(unix)]
+fn stdout_isatty() -> bool {
+    unsafe { libc::isatty(libc::STDOUT_FILENO) != 0 }
+}
+#[cfg(windows)]
+fn stdout_isatty() -> bool {
+    type DWORD = u32;
+    type BOOL = i32;
+    type HANDLE = *mut u8;
+    type LPDWORD = *mut u32;
+    const STD_OUTPUT_HANDLE: DWORD = -11i32 as DWORD;
+    extern "system" {
+        fn GetStdHandle(which: DWORD) -> HANDLE;
+        fn GetConsoleMode(hConsoleHandle: HANDLE, lpMode: LPDWORD) -> BOOL;
+    }
+    unsafe {
+        let handle = GetStdHandle(STD_OUTPUT_HANDLE);
+        let mut out = 0;
+        GetConsoleMode(handle, &mut out) != 0
+    }
+}
+
 fn handle_explain(code: &str,
                   descriptions: &errors::registry::Registry,
                   output: ErrorOutputType) {