diff --git a/src/encode/writer/console.rs b/src/encode/writer/console.rs index 6524b4dd..ff9783a7 100644 --- a/src/encode/writer/console.rs +++ b/src/encode/writer/console.rs @@ -319,9 +319,13 @@ mod imp { } impl Writer { - pub fn stdout() -> Option { + fn create_writer(inner_writer: StdWriter) -> Option { unsafe { - let handle = processenv::GetStdHandle(winbase::STD_OUTPUT_HANDLE); + let handle = match inner_writer { + StdWriter::Stdout(_) => processenv::GetStdHandle(winbase::STD_OUTPUT_HANDLE), + StdWriter::Stderr(_) => processenv::GetStdHandle(winbase::STD_ERROR_HANDLE), + }; + if handle.is_null() || handle == handleapi::INVALID_HANDLE_VALUE { return None; } @@ -336,7 +340,7 @@ mod imp { handle, defaults: info.wAttributes, }, - inner: StdWriter::stdout(), + inner: inner_writer, }; match color_mode() { @@ -346,31 +350,12 @@ mod imp { } } - pub fn stderr() -> Option { - unsafe { - let handle = processenv::GetStdHandle(winbase::STD_ERROR_HANDLE); - if handle.is_null() || handle == handleapi::INVALID_HANDLE_VALUE { - return None; - } - - let mut info = mem::zeroed(); - if wincon::GetConsoleScreenBufferInfo(handle, &mut info) == 0 { - return None; - } - - let writer = Writer { - console: RawConsole { - handle, - defaults: info.wAttributes, - }, - inner: StdWriter::stdout(), - }; + pub fn stdout() -> Option { + Self::create_writer(StdWriter::stdout()) + } - match color_mode() { - ColorMode::Auto | ColorMode::Always => Some(writer), - ColorMode::Never => None, - } - } + pub fn stderr() -> Option { + Self::create_writer(StdWriter::stderr()) } pub fn lock<'a>(&'a self) -> WriterLock<'a> {