boxxy 0.14.0

Linkable sandbox explorer
Documentation
use clap::{App, Arg, AppSettings};
use crate::{Shell, Arguments};
use crate::errors::*;
use std::ffi::CString;

pub fn chown(sh: &mut Shell, args: Arguments) -> Result<()> {
    let matches = App::new("chown")
        .setting(AppSettings::DisableVersion)
        .arg(Arg::with_name("uid").required(true))
        .arg(Arg::with_name("gid").required(true))
        .arg(Arg::with_name("path")
            .required(true)
            .multiple(true)
        )
        .get_matches_from_safe(args)?;

    let uid = matches.value_of("uid").unwrap().parse()?;
    let gid = matches.value_of("uid").unwrap().parse()?;

    for path in matches.values_of("path").unwrap() {
        debug!("chown: {:?} => {:?}:{:?}", path, uid, gid);

        let path = CString::new(path).unwrap();
        let ret = unsafe { libc::chown(path.as_ptr(), uid, gid) };

        if ret != 0 {
            let err = errno();
            shprintln!(sh, "error: {:?}", err);
        }
    }

    Ok(())
}