1
5
mirror of https://github.com/vinc/moros.git synced 2024-06-15 05:36:38 +00:00
moros/src/usr/write.rs
Vincent Ollivier e4ce2ab59c
Use exit code to set status var (#360)
* Use exit code

* Add macro_use to sys module

* Replace ExitCode with Result<usize, usize>

* Add status var

* Fix status code

* Replace status with ?

* Fix regex for var substitution

* Remove warnings

* Add temporary fix for failing tests

* Add q shortcut to calc

* Use usize for exit code

* Use process exit codes

* Reintroduce ExitCode enum

* Use ExitCode::UsageError where needed

* Display usage error in find command

* Add doc
2022-06-29 19:23:01 +02:00

30 lines
775 B
Rust

use crate::api::fs;
use crate::api::process::ExitCode;
use crate::api::syscall;
pub fn main(args: &[&str]) -> Result<(), ExitCode> {
if args.len() != 2 {
return Err(ExitCode::UsageError);
}
let pathname = args[1];
// The command `write /usr/alice/` with a trailing slash will create
// a directory, while the same command without a trailing slash will
// create a file.
let res = if pathname.ends_with('/') {
let pathname = pathname.trim_end_matches('/');
fs::create_dir(pathname)
} else {
fs::create_file(pathname)
};
if let Some(handle) = res {
syscall::close(handle);
Ok(())
} else {
error!("Could not write to '{}'", pathname);
Err(ExitCode::Failure)
}
}