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 {
.or_else(|| attr::find_crate_name(attrs).map(|n| n.to_string()))
.unwrap_or_else(|| input.filestem().to_owned());
- OutputFilenames {
- out_directory: dirpath,
- out_filestem: stem,
- single_output_file: None,
- extra: sess.opts.cg.extra_filename.clone(),
- outputs: sess.opts.output_types.clone(),
- }
+ OutputFilenames::new(
+ dirpath,
+ stem,
+ None,
+ sess.opts.cg.extra_filename.clone(),
+ sess.opts.output_types.clone(),
+ )
}
Some(ref out_file) => {
sess.warn("ignoring --out-dir flag due to -o flag");
}
- OutputFilenames {
- out_directory: out_file.parent().unwrap_or_else(|| Path::new("")).to_path_buf(),
- out_filestem: out_file
- .file_stem()
- .unwrap_or_default()
- .to_str()
- .unwrap()
- .to_string(),
- single_output_file: ofile,
- extra: sess.opts.cg.extra_filename.clone(),
- outputs: sess.opts.output_types.clone(),
- }
+ OutputFilenames::new(
+ out_file.parent().unwrap_or_else(|| Path::new("")).to_path_buf(),
+ out_file.file_stem().unwrap_or_default().to_str().unwrap().to_string(),
+ ofile,
+ sess.opts.cg.extra_filename.clone(),
+ sess.opts.output_types.clone(),
+ )
}
}
}