#![cfg(target_os = "windows")]
pub(super) fn probe_version() -> String {
#[repr(C)]
struct OsVersionInfoExW {
dw_os_version_info_size: u32,
dw_major_version: u32,
dw_minor_version: u32,
dw_build_number: u32,
dw_platform_id: u32,
sz_csd_version: [u16; 128],
w_service_pack_major: u16,
w_service_pack_minor: u16,
w_suite_mask: u16,
w_product_type: u8,
w_reserved: u8,
}
#[link(name = "ntdll")]
unsafe extern "system" {
fn RtlGetVersion(lp_version_information: *mut OsVersionInfoExW) -> i32;
}
let mut info: OsVersionInfoExW = unsafe { std::mem::zeroed() };
info.dw_os_version_info_size = std::mem::size_of::<OsVersionInfoExW>() as u32;
let status = unsafe { RtlGetVersion(&mut info) };
if status != 0 {
return "unknown".to_string();
}
format!(
"{}.{}.{}",
info.dw_major_version, info.dw_minor_version, info.dw_build_number
)
}
pub(super) fn probe_distro() -> Option<String> {
None
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_probe_version_returns_non_empty_default() {
assert!(!probe_version().is_empty());
}
#[test]
fn test_probe_version_returns_real_version_or_unknown() {
let v = probe_version();
assert!(!v.is_empty());
if v != "unknown" {
let parts: Vec<&str> = v.split('.').collect();
assert_eq!(parts.len(), 3, "expected major.minor.build, got {:?}", v);
for p in parts {
assert!(
p.chars().all(|c| c.is_ascii_digit()),
"expected all-digit component, got {:?}",
p
);
}
}
}
#[test]
fn test_probe_distro_returns_none() {
assert!(probe_distro().is_none());
}
}