#[cfg(not(any(target_os = "macos", target_os = "ios")))]
use crate::Group;
impl crate::GroupInner {
pub(crate) fn new(id: crate::Gid, name: String) -> Self {
Self { id, name }
}
pub(crate) fn id(&self) -> &crate::Gid {
&self.id
}
pub(crate) fn name(&self) -> &str {
&self.name
}
}
#[cfg(not(any(target_os = "macos", target_os = "ios")))]
pub(crate) fn get_groups(groups: &mut Vec<Group>) {
use crate::common::{Gid, GroupInner};
use std::fs::File;
use std::io::Read;
#[inline]
fn parse_id(id: &str) -> Option<u32> {
id.parse::<u32>().ok()
}
groups.clear();
let mut s = String::new();
let _ = File::open("/etc/group").and_then(|mut f| f.read_to_string(&mut s));
for line in s.lines() {
let mut parts = line.split(':');
if let Some(name) = parts.next() {
let mut parts = parts.skip(1);
if let Some(gid) = parts.next().and_then(parse_id) {
groups.push(Group {
inner: GroupInner::new(Gid(gid), name.to_owned()),
});
}
}
}
}
#[cfg(any(target_os = "macos", target_os = "ios"))]
pub(crate) use crate::unix::apple::groups::get_groups;