about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLzu Tao <taolzu@gmail.com>2019-07-05 18:59:56 +0000
committerLzu Tao <taolzu@gmail.com>2019-07-06 03:27:05 +0000
commit42c3d3714508c9ab51e5c83dd78a37dbc5e2890c (patch)
tree4e52b5b7f52de58f0bb33f411122dbe831b09d48
parent05c1e92787d134c53a38c5eea7100caa7441fccd (diff)
downloadrust-42c3d3714508c9ab51e5c83dd78a37dbc5e2890c.tar.gz
rust-42c3d3714508c9ab51e5c83dd78a37dbc5e2890c.zip
Remove use of mem::uninitialized in libterm crate
-rw-r--r--src/libterm/win.rs13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/libterm/win.rs b/src/libterm/win.rs
index f5c60ee3522..e5911de8396 100644
--- a/src/libterm/win.rs
+++ b/src/libterm/win.rs
@@ -2,8 +2,6 @@
 
 // FIXME (#13400): this is only a tiny fraction of the Windows console api
 
-extern crate libc;
-
 use std::io;
 use std::io::prelude::*;
 
@@ -122,12 +120,17 @@ impl<T: Write + Send + 'static> WinConsole<T> {
 
     /// Returns `None` whenever the terminal cannot be created for some reason.
     pub fn new(out: T) -> io::Result<WinConsole<T>> {
+        use std::mem::MaybeUninit;
+
         let fg;
         let bg;
         unsafe {
-            #[allow(deprecated)]
-            let mut buffer_info = ::std::mem::uninitialized();
-            if GetConsoleScreenBufferInfo(GetStdHandle(-11i32 as DWORD), &mut buffer_info) != 0 {
+            let mut buffer_info = MaybeUninit::<CONSOLE_SCREEN_BUFFER_INFO>::uninit();
+            if GetConsoleScreenBufferInfo(
+                GetStdHandle(-11i32 as DWORD),
+                buffer_info.as_mut_ptr()
+            ) != 0 {
+                let buffer_info = buffer_info.assume_init() ;
                 fg = bits_to_color(buffer_info.wAttributes);
                 bg = bits_to_color(buffer_info.wAttributes >> 4);
             } else {