Add make_directory_path/1 predicate to the files library

This commit is contained in:
Paulo Moura
2021-05-18 00:21:11 +01:00
parent e7d6811948
commit bdebc7f32e
3 changed files with 19 additions and 0 deletions

View File

@@ -173,6 +173,7 @@ pub(crate) enum SystemClauseType {
DirectoryExists, DirectoryExists,
DirectorySeparator, DirectorySeparator,
MakeDirectory, MakeDirectory,
MakeDirectoryPath,
DeleteFile, DeleteFile,
WorkingDirectory, WorkingDirectory,
PathCanonical, PathCanonical,
@@ -334,6 +335,7 @@ impl SystemClauseType {
&SystemClauseType::DirectoryExists => clause_name!("$directory_exists"), &SystemClauseType::DirectoryExists => clause_name!("$directory_exists"),
&SystemClauseType::DirectorySeparator => clause_name!("$directory_separator"), &SystemClauseType::DirectorySeparator => clause_name!("$directory_separator"),
&SystemClauseType::MakeDirectory => clause_name!("$make_directory"), &SystemClauseType::MakeDirectory => clause_name!("$make_directory"),
&SystemClauseType::MakeDirectoryPath => clause_name!("$make_directory_path"),
&SystemClauseType::DeleteFile => clause_name!("$delete_file"), &SystemClauseType::DeleteFile => clause_name!("$delete_file"),
&SystemClauseType::WorkingDirectory => clause_name!("$working_directory"), &SystemClauseType::WorkingDirectory => clause_name!("$working_directory"),
&SystemClauseType::PathCanonical => clause_name!("$path_canonical"), &SystemClauseType::PathCanonical => clause_name!("$path_canonical"),
@@ -743,6 +745,7 @@ impl SystemClauseType {
("$directory_exists", 1) => Some(SystemClauseType::DirectoryExists), ("$directory_exists", 1) => Some(SystemClauseType::DirectoryExists),
("$directory_separator", 1) => Some(SystemClauseType::DirectorySeparator), ("$directory_separator", 1) => Some(SystemClauseType::DirectorySeparator),
("$make_directory", 1) => Some(SystemClauseType::MakeDirectory), ("$make_directory", 1) => Some(SystemClauseType::MakeDirectory),
("$make_directory_path", 1) => Some(SystemClauseType::MakeDirectoryPath),
("$delete_file", 1) => Some(SystemClauseType::DeleteFile), ("$delete_file", 1) => Some(SystemClauseType::DeleteFile),
("$working_directory", 2) => Some(SystemClauseType::WorkingDirectory), ("$working_directory", 2) => Some(SystemClauseType::WorkingDirectory),
("$path_canonical", 2) => Some(SystemClauseType::PathCanonical), ("$path_canonical", 2) => Some(SystemClauseType::PathCanonical),

View File

@@ -52,6 +52,7 @@
directory_exists/1, directory_exists/1,
delete_file/1, delete_file/1,
make_directory/1, make_directory/1,
make_directory_path/1,
working_directory/2, working_directory/2,
path_canonical/2, path_canonical/2,
path_segments/2, path_segments/2,
@@ -90,6 +91,10 @@ make_directory(Directory) :-
list_of_chars(Directory), list_of_chars(Directory),
'$make_directory'(Directory). '$make_directory'(Directory).
make_directory_path(Directory) :-
list_of_chars(Directory),
'$make_directory_path'(Directory).
delete_file(File) :- delete_file(File) :-
file_must_exist(File, delete_file/1), file_must_exist(File, delete_file/1),
list_of_chars(File), list_of_chars(File),

View File

@@ -878,6 +878,17 @@ impl MachineState {
} }
} }
} }
&SystemClauseType::MakeDirectoryPath => {
let directory = self.heap_pstr_iter(self[temp_v!(1)]).to_string();
match fs::create_dir_all(directory) {
Ok(_) => {}
_ => {
self.fail = true;
return Ok(());
}
}
}
&SystemClauseType::DeleteFile => { &SystemClauseType::DeleteFile => {
let file = self.heap_pstr_iter(self[temp_v!(1)]).to_string(); let file = self.heap_pstr_iter(self[temp_v!(1)]).to_string();