Resume output of resolution field
[pulga.git] / src / uname.rs
blob6ccdb4e019e40555552ab2dbb734c31df704d0ed
1 use libc::{uname, utsname};
2 use std::{ffi::CStr, mem};
4 pub struct UnameData {
5     pub system_name: String,
6     pub node_name:   String,
7     pub release:     String,
8     pub version:     String,
9     pub machine:     String,
12 impl UnameData {
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()) };
26         UnameData {
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(),
32         }
33     }