1 use libc::{uname, utsname};
2 use std::{ffi::CStr, mem};
5 pub system_name: String,
13 pub fn gather() -> UnameData {
14 let mut uts_struct: utsname = unsafe { mem::zeroed() };
16 let ret_val = unsafe { uname(&mut uts_struct) };
17 // uname returns a negative number upon failure
18 assert!(ret_val >= 0, "libc::uname failed.");
20 let sysname_cstr = unsafe { CStr::from_ptr(uts_struct.sysname.as_ptr()) };
21 let nodename_cstr = unsafe { CStr::from_ptr(uts_struct.nodename.as_ptr()) };
22 let release_cstr = unsafe { CStr::from_ptr(uts_struct.release.as_ptr()) };
23 let version_cstr = unsafe { CStr::from_ptr(uts_struct.version.as_ptr()) };
24 let machine_cstr = unsafe { CStr::from_ptr(uts_struct.machine.as_ptr()) };
27 system_name: sysname_cstr.to_string_lossy().into_owned(),
28 node_name: nodename_cstr.to_string_lossy().into_owned(),
29 release: release_cstr.to_string_lossy().into_owned(),
30 version: version_cstr.to_string_lossy().into_owned(),
31 machine: machine_cstr.to_string_lossy().into_owned(),