File: raw-dylib.rs

package info (click to toggle)
rustc-web 1.85.0%2Bdfsg3-1~deb12u3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm-proposed-updates
  • size: 1,759,988 kB
  • sloc: xml: 158,127; python: 35,830; javascript: 19,497; cpp: 19,002; sh: 17,245; ansic: 13,127; asm: 4,376; makefile: 1,056; lisp: 29; perl: 29; ruby: 19; sql: 11
file content (31 lines) | stat: -rw-r--r-- 1,082 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// 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"));
        }
    }
}