Add predicate copy_file/2 in library(files)

This commit is contained in:
Adrián Arroyo Calle
2022-12-11 00:06:56 +01:00
parent 209f7a239a
commit c6aa2068e2
4 changed files with 33 additions and 2 deletions
+8
View File
@@ -3533,6 +3533,14 @@ impl Machine {
self.rename_file();
step_or_fail!(self, self.machine_st.p = self.machine_st.cp);
}
&Instruction::CallCopyFile(_) => {
self.copy_file();
step_or_fail!(self, self.machine_st.p += 1);
}
&Instruction::ExecuteCopyFile(_) => {
self.copy_file();
step_or_fail!(self, self.machine_st.p = self.machine_st.cp);
}
&Instruction::CallWorkingDirectory(_) => {
try_or_throw!(self.machine_st, self.working_directory());
step_or_fail!(self, self.machine_st.p += 1);
+13
View File
@@ -1653,6 +1653,19 @@ impl Machine {
self.machine_st.fail = true;
}
#[inline(always)]
pub(crate) fn copy_file(&mut self) {
if let Some(file) = self.machine_st.value_to_str_like(self.machine_st.registers[1]) {
if let Some(copied) = self.machine_st.value_to_str_like(self.machine_st.registers[2]) {
if fs::copy(file.as_str(), copied.as_str()).is_ok() {
return;
}
}
}
self.machine_st.fail = true;
}
#[inline(always)]
pub(crate) fn delete_directory(&mut self) {
if let Some(dir) = self.machine_st.value_to_str_like(self.machine_st.registers[1]) {