about summary refs log tree commit diff
path: root/src/librustc_interface
diff options
context:
space:
mode:
authorAndy Russell <arussell123@gmail.com>2020-01-04 16:46:47 -0500
committerAndy Russell <arussell123@gmail.com>2020-01-11 20:56:46 -0500
commit7b564c67deb6f5e9d7102871d63a9ad3d7161278 (patch)
treeb43fded1c4297cb96a2c7825044d66def77f851c /src/librustc_interface
parent1389494ac145a84dba025ff65969f7ab150c3f02 (diff)
use winapi for non-stdlib Windows bindings
Diffstat (limited to 'src/librustc_interface')
-rw-r--r--src/librustc_interface/Cargo.toml3
-rw-r--r--src/librustc_interface/util.rs14
2 files changed, 9 insertions, 8 deletions
diff --git a/src/librustc_interface/Cargo.toml b/src/librustc_interface/Cargo.toml
index eb0551c6065..548985c4514 100644
--- a/src/librustc_interface/Cargo.toml
+++ b/src/librustc_interface/Cargo.toml
@@ -42,6 +42,9 @@ rustc_resolve = { path = "../librustc_resolve" }
 tempfile = "3.0.5"
 once_cell = "1"
 
+[target.'cfg(windows)'.dependencies]
+winapi = { version = "0.3", features = ["libloaderapi"] }
+
 [dev-dependencies]
 rustc_target = { path = "../librustc_target" }
 
diff --git a/src/librustc_interface/util.rs b/src/librustc_interface/util.rs
index 2fafd3af7a5..21f9fa48165 100644
--- a/src/librustc_interface/util.rs
+++ b/src/librustc_interface/util.rs
@@ -340,19 +340,17 @@ fn sysroot_candidates() -> Vec<PathBuf> {
     fn current_dll_path() -> Option<PathBuf> {
         use std::ffi::OsString;
         use std::os::windows::prelude::*;
+        use std::ptr;
 
-        extern "system" {
-            fn GetModuleHandleExW(dwFlags: u32, lpModuleName: usize, phModule: *mut usize) -> i32;
-            fn GetModuleFileNameW(hModule: usize, lpFilename: *mut u16, nSize: u32) -> u32;
-        }
-
-        const GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS: u32 = 0x00000004;
+        use winapi::um::libloaderapi::{
+            GetModuleFileNameW, GetModuleHandleExW, GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,
+        };
 
         unsafe {
-            let mut module = 0;
+            let mut module = ptr::null_mut();
             let r = GetModuleHandleExW(
                 GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,
-                current_dll_path as usize,
+                current_dll_path as usize as *mut _,
                 &mut module,
             );
             if r == 0 {