mirror of https://github.com/dswd/zvault
19 lines
570 B
Rust
19 lines
570 B
Rust
|
use libc;
|
||
|
use std::ffi;
|
||
|
|
||
|
extern {
|
||
|
fn gethostname(name: *mut libc::c_char, size: libc::size_t) -> libc::c_int;
|
||
|
}
|
||
|
|
||
|
pub fn get_hostname() -> Result<String, ()> {
|
||
|
let mut buf = Vec::with_capacity(255);
|
||
|
buf.resize(255, 0u8);
|
||
|
if unsafe { gethostname(buf.as_mut_ptr() as *mut libc::c_char, buf.len() as libc::size_t) } == 0 {
|
||
|
buf[254] = 0; //enforce null-termination
|
||
|
let name = unsafe { ffi::CStr::from_ptr(buf.as_ptr() as *const libc::c_char) };
|
||
|
name.to_str().map(|s| s.to_string()).map_err(|_| ())
|
||
|
} else {
|
||
|
Err(())
|
||
|
}
|
||
|
}
|