mprober_lib/hostname/
mod.rs1use std::io;
2
3use crate::scanner_rust::ScannerError;
4
5#[inline]
15pub fn get_hostname() -> Result<String, ScannerError> {
16 let buffer_size = unsafe { libc::sysconf(libc::_SC_HOST_NAME_MAX) } as usize;
17
18 let mut buffer: Vec<u8> = Vec::with_capacity(buffer_size);
19
20 let c = unsafe { libc::gethostname(buffer.as_mut_ptr() as *mut libc::c_char, buffer_size) }
21 as usize;
22
23 if c != 0 {
24 return Err(io::Error::last_os_error().into());
25 }
26
27 unsafe {
28 buffer.set_len(buffer_size);
29 }
30
31 if let Some(end) = buffer.iter().copied().position(|e| e == b'\0') {
32 unsafe {
33 buffer.set_len(end);
34 }
35 }
36
37 Ok(unsafe { String::from_utf8_unchecked(buffer) })
38}