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(())
|
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>) {
|
pub fn register(r: &mut Stack, o: Arc<Frame>) {
|
||||||
type Fn = fn(&mut Stack) -> OError;
|
type Fn = fn(&mut Stack) -> OError;
|
||||||
let fns: [(&str, Fn, u32); 65] = [
|
let fns: [(&str, Fn, u32); 68] = [
|
||||||
("pop", pop, 0),
|
("pop", pop, 0),
|
||||||
("dup", dup, 2),
|
("dup", dup, 2),
|
||||||
("dup2", dup2, 3),
|
("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),
|
("mega-to-str-radix", mega_to_str_radix, 1),
|
||||||
("properties", properties, 1),
|
("properties", properties, 1),
|
||||||
("from-properties", from_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 {
|
for f in fns {
|
||||||
r.define_func(
|
r.define_func(
|
||||||
|
|
Loading…
Add table
Reference in a new issue