Mercurial > lbo > hg > syslog
changeset 28:07f67992c899 draft default tip
Implement gethostname/getfullhostname utility functions
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Sun, 04 Dec 2016 17:48:14 +0100 |
parents | ceb9bd6d94e2 |
children | |
files | src/util.rs |
diffstat | 1 files changed, 35 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/util.rs Sun Dec 04 17:48:14 2016 +0100 @@ -0,0 +1,35 @@ +use libc; + +pub fn getfullhostname() -> Option<String> { + const MAX_HOSTNAME_LENGTH: usize = 255; // Max possible size as specified by POSIX + let mut dest = [0 as i8; MAX_HOSTNAME_LENGTH]; + + unsafe { + let err = libc::gethostname(&mut dest[0] as *mut libc::c_char, MAX_HOSTNAME_LENGTH as libc::size_t); + + if err == 0 { + match String::from_utf8(dest.into_iter() + .filter(|c| **c > 0) + .map(|c| *c as u8) + .collect()) { + Ok(s) => Some(s), + Err(_) => None, + } + } else { + None + } + } +} + +pub fn gethostname() -> Option<String> { + getfullhostname().and_then(|s| s.split('.').next().map(|s| s.to_string())) +} + +#[cfg(test)] +mod tests { + #[test] + fn test_util_gethostname() { + println!("{:?}", super::gethostname()); + println!("{:?}", super::getfullhostname()); + } +}