mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-08-01 13:37:48 +00:00
Add uucore::utsname to get system info
This commit is contained in:
parent
8781df81fb
commit
c63aa19cd1
3 changed files with 56 additions and 2 deletions
|
@ -18,12 +18,12 @@ utf8 = []
|
|||
encoding = ["data-encoding"]
|
||||
parse_time = []
|
||||
utmpx = ["time", "libc"]
|
||||
c_types = ["libc"]
|
||||
process = ["libc"]
|
||||
signals = []
|
||||
entries = ["libc"]
|
||||
wide = []
|
||||
default = ["fs", "libc", "utf8", "encoding", "parse_time", "utmpx", "c_types", "process", "entries", "signals", "wide"]
|
||||
utsname = ["libc"]
|
||||
default = ["fs", "libc", "utf8", "utsname", "encoding", "parse_time", "utmpx", "process", "entries", "signals", "wide"]
|
||||
|
||||
[lib]
|
||||
path = "lib.rs"
|
||||
|
|
|
@ -20,6 +20,8 @@ pub mod parse_time;
|
|||
pub mod utmpx;
|
||||
#[cfg(all(unix, feature = "c_types"))]
|
||||
pub mod c_types;
|
||||
#[cfg(all(unix, feature = "utsname"))]
|
||||
pub mod utsname;
|
||||
#[cfg(all(unix, feature = "entries"))]
|
||||
pub mod entries;
|
||||
#[cfg(all(unix, feature = "process"))]
|
||||
|
|
52
src/uucore/utsname.rs
Normal file
52
src/uucore/utsname.rs
Normal file
|
@ -0,0 +1,52 @@
|
|||
// This file is part of the uutils coreutils package.
|
||||
//
|
||||
// (c) Jian Zeng <anonymousknight96 AT gmail.com>
|
||||
//
|
||||
// For the full copyright and license information, please view the LICENSE file
|
||||
// that was distributed with this source code.
|
||||
//
|
||||
|
||||
use super::libc::{uname, utsname};
|
||||
use ::std::mem;
|
||||
use ::std::ffi::CStr;
|
||||
use ::std::borrow::Cow;
|
||||
|
||||
macro_rules! cstr2cow {
|
||||
($v:expr) => (
|
||||
unsafe { CStr::from_ptr($v.as_ref().as_ptr()).to_string_lossy() }
|
||||
)
|
||||
}
|
||||
|
||||
pub struct Uname {
|
||||
inner: utsname,
|
||||
}
|
||||
|
||||
impl Uname {
|
||||
pub fn new() -> Self {
|
||||
unsafe {
|
||||
let mut uts: utsname = mem::uninitialized();
|
||||
uname(&mut uts);
|
||||
Uname { inner: uts }
|
||||
}
|
||||
}
|
||||
|
||||
pub fn sysname(&self) -> Cow<str> {
|
||||
cstr2cow!(self.inner.sysname)
|
||||
}
|
||||
|
||||
pub fn nodename(&self) -> Cow<str> {
|
||||
cstr2cow!(self.inner.nodename)
|
||||
}
|
||||
|
||||
pub fn release(&self) -> Cow<str> {
|
||||
cstr2cow!(self.inner.release)
|
||||
}
|
||||
|
||||
pub fn version(&self) -> Cow<str> {
|
||||
cstr2cow!(self.inner.version)
|
||||
}
|
||||
|
||||
pub fn machine(&self) -> Cow<str> {
|
||||
cstr2cow!(self.inner.machine)
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue