add delete-dir, delete-file, list-files
This commit is contained in:
parent
e72baba154
commit
290630adbe
1 changed files with 47 additions and 1 deletions
|
@ -1085,9 +1085,52 @@ pub fn from_properties(stack: &mut Stack) -> OError {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
pub fn list_files(stack: &mut Stack) -> OError {
|
||||
require_on_stack!(dir, Str, stack, "list-files");
|
||||
stack.push(
|
||||
match fs::read_dir(&dir)
|
||||
.map_err(|_| stack.error(ErrorKind::IO(format!("Not a directory: {}", &dir))))
|
||||
{
|
||||
Ok(it) => Value::Array(
|
||||
it.filter(|x| x.is_ok())
|
||||
.map(|x| {
|
||||
if let Ok(x) = x {
|
||||
Value::Str(x.file_name().to_string_lossy().into_owned()).spl()
|
||||
} else {
|
||||
unreachable!()
|
||||
}
|
||||
})
|
||||
.collect(),
|
||||
)
|
||||
.spl(),
|
||||
Err(_) => Value::Null.spl(),
|
||||
},
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn delete_file(stack: &mut Stack) -> OError {
|
||||
require_on_stack!(file, Str, stack, "delete-file");
|
||||
stack.push(Value::Int(if fs::remove_file(file).is_ok() { 1 } else { 0 }).spl());
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn delete_dir(stack: &mut Stack) -> OError {
|
||||
require_on_stack!(dir, Str, stack, "delete-dir");
|
||||
stack.push(
|
||||
Value::Int(if fs::remove_dir_all(dir).is_ok() {
|
||||
1
|
||||
} else {
|
||||
0
|
||||
})
|
||||
.spl(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn register(r: &mut Stack, o: Arc<Frame>) {
|
||||
type Fn = fn(&mut Stack) -> OError;
|
||||
let fns: [(&str, Fn, u32); 65] = [
|
||||
let fns: [(&str, Fn, u32); 68] = [
|
||||
("pop", pop, 0),
|
||||
("dup", dup, 2),
|
||||
("dup2", dup2, 3),
|
||||
|
@ -1153,6 +1196,9 @@ pub fn register(r: &mut Stack, o: Arc<Frame>) {
|
|||
("mega-to-str-radix", mega_to_str_radix, 1),
|
||||
("properties", properties, 1),
|
||||
("from-properties", from_properties, 1),
|
||||
("list-files", list_files, 1),
|
||||
("delete-file", delete_file, 1),
|
||||
("delete-dir", delete_dir, 1),
|
||||
];
|
||||
for f in fns {
|
||||
r.define_func(
|
||||
|
|
Loading…
Add table
Reference in a new issue