getifs 0.5.0

Cross-platform enumeration of network interfaces and their MTU, gateway, multicast, and local/private/public IP addresses.
Documentation
#[cfg(windows)]
pub(crate) fn friendly_name(name: windows_sys::core::PWSTR) -> Option<smol_str::SmolStr> {
  if name.is_null() {
    return None;
  }

  unsafe {
    let len = wide_str_len(name);
    let s = match widestring::U16CStr::from_ptr(name, len) {
      Ok(s) => s,
      Err(_) => return None,
    };
    let osname_str = s.to_string_lossy();
    Some(smol_str::SmolStr::new(&osname_str))
  }
}

#[cfg(windows)]
unsafe fn wide_str_len(ptr: *mut u16) -> usize {
  let mut len = 0;
  while *ptr.add(len) != 0 {
    len += 1;
  }
  len
}