mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 04:57:19 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			32 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			32 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| // Tests the raw-dylib feature for Windows.
 | |
| // https://doc.rust-lang.org/reference/items/external-blocks.html#the-link-attribute
 | |
| 
 | |
| fn main() {
 | |
|     #[cfg(windows)]
 | |
|     {
 | |
|         #[link(name = "kernel32", kind = "raw-dylib")]
 | |
|         extern "C" {
 | |
|             fn GetModuleFileNameA(
 | |
|                 module: *mut std::ffi::c_void,
 | |
|                 filename: *mut u8,
 | |
|                 size: u32,
 | |
|             ) -> u32;
 | |
|         }
 | |
| 
 | |
|         // Get the filename of the current executable....
 | |
|         let mut buffer = [0u8; 1024];
 | |
|         let size = unsafe {
 | |
|             GetModuleFileNameA(core::ptr::null_mut(), buffer.as_mut_ptr(), buffer.len() as u32)
 | |
|         };
 | |
|         if size == 0 {
 | |
|             eprintln!("failed to get module file name: {}", std::io::Error::last_os_error());
 | |
|             return;
 | |
|         } else {
 | |
|             // ...and make sure that it matches the test name.
 | |
|             let filename =
 | |
|                 std::ffi::CStr::from_bytes_with_nul(&buffer[..size as usize + 1]).unwrap();
 | |
|             assert!(filename.to_str().unwrap().ends_with("raw-dylib.exe"));
 | |
|         }
 | |
|     }
 | |
| }
 | 
