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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
use std::ffi::CStr; use UtsName; use std::fmt; #[derive(Debug, Hash, PartialEq, Eq, PartialOrd, Ord, Clone)] pub struct UtsNameSlice<'a> { sysname: &'a CStr, nodename: &'a CStr, release: &'a CStr, version: &'a CStr, machine: &'a CStr, #[cfg(feature = "enable_domainname")] domainname: &'a CStr, } impl<'a> UtsNameSlice<'a> { #[cfg(feature = "enable_domainname")] #[inline] pub fn new(a1: &'a CStr, a2: &'a CStr, a3: &'a CStr, a4: &'a CStr, a5: &'a CStr, a6: &'a CStr) -> UtsNameSlice<'a> { UtsNameSlice { sysname: a1, nodename: a2, release: a3, version: a4, machine: a5, domainname: a6, } } #[cfg(not(feature = "enable_domainname"))] #[inline] pub fn new(a1: &'a CStr, a2: &'a CStr, a3: &'a CStr, a4: &'a CStr, a5: &'a CStr) -> UtsNameSlice<'a> { UtsNameSlice { sysname: a1, nodename: a2, release: a3, version: a4, machine: a5, } } } impl<'a> UtsName for UtsNameSlice<'a> { #[inline] fn as_sysname(&self) -> &CStr { self.sysname } #[inline] fn as_nodename(&self) -> &CStr { self.nodename } #[inline] fn as_release(&self) -> &CStr { self.release } #[inline] fn as_version(&self) -> &CStr { self.version } #[inline] fn as_machine(&self) -> &CStr { self.machine } #[cfg(feature = "enable_domainname")] #[inline] fn as_domainname(&self) -> &CStr { self.domainname } } impl<'a> fmt::Display for UtsNameSlice<'a> { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { let sysname = self.display_sysname(); let nodename = self.display_nodename(); let release = self.display_release(); let version = self.display_version(); let machine = self.display_machine(); #[cfg(feature = "enable_domainname")] let domainname = self.display_domainname(); #[cfg(feature = "enable_domainname")] let result = write!(f, "{} {} {} {} {} {}", sysname, nodename, release, version, machine, domainname); #[cfg(not(feature = "enable_domainname"))] let result = write!(f, "{} {} {} {} {}", sysname, nodename, release, version, machine); result } } #[cfg(feature = "enable_domainname")] impl<'a> From< (&'a CStr, &'a CStr, &'a CStr, &'a CStr, &'a CStr, &'a CStr) > for UtsNameSlice<'a> { #[inline] fn from(uts: (&'a CStr, &'a CStr, &'a CStr, &'a CStr, &'a CStr, &'a CStr)) -> UtsNameSlice<'a> { UtsNameSlice::new(uts.0, uts.1, uts.2, uts.3, uts.4, uts.5) } } #[cfg(not(feature = "enable_domainname"))] impl<'a> From< (&'a CStr, &'a CStr, &'a CStr, &'a CStr, &'a CStr) > for UtsNameSlice<'a> { #[inline] fn from(uts: (&'a CStr, &'a CStr, &'a CStr, &'a CStr, &'a CStr)) -> UtsNameSlice<'a> { UtsNameSlice::new(uts.0, uts.1, uts.2, uts.3, uts.4) } }