Add make_directory_path/1 predicate to the files library
This commit is contained in:
@@ -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),
|
||||||
|
|||||||
@@ -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),
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user