1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

compiler: add os.mv_by_cp and use it for the temporary files

This commit is contained in:
Delyan Angelov 2019-11-19 11:55:03 +02:00 committed by Alexander Medvednikov
parent 0cf232d692
commit a620e66af5
3 changed files with 12 additions and 2 deletions

View File

@ -11,7 +11,7 @@ fn main() {
if os.file_exists( v_backup_file ) { if os.file_exists( v_backup_file ) {
os.rm( v_backup_file ) os.rm( v_backup_file )
} }
os.mv('$vroot/v.exe', v_backup_file) os.mv_by_cp('$vroot/v.exe', v_backup_file) or { panic(err) }
s2 := os.exec('"$vroot/make.bat"') or { panic(err) } s2 := os.exec('"$vroot/make.bat"') or { panic(err) }
println(s2.output) println(s2.output)
} $else { } $else {

View File

@ -57,7 +57,9 @@ fn (v mut V) cc() {
} }
} }
} }
os.mv(v.out_name_c, v.out_name)
// v.out_name_c may be on a different partition than v.out_name
os.mv_by_cp(v.out_name_c, v.out_name) or { panic(err) }
exit(0) exit(0)
} }
// Cross compiling for Windows // Cross compiling for Windows

View File

@ -187,6 +187,14 @@ pub fn cp_r(osource_path, odest_path string, overwrite bool) ?bool{
return true return true
} }
// mv_by_cp first copies the source file, and if it is copied successfully, deletes the source file.
// mv_by_cp may be used when you are not sure that the source and target are on the same mount/partition.
pub fn mv_by_cp(source string, target string) ?bool {
os.cp(source, target) or { return error(err) }
os.rm(source)
return true
}
fn vfopen(path, mode string) *C.FILE { fn vfopen(path, mode string) *C.FILE {
$if windows { $if windows {
return C._wfopen(path.to_wide(), mode.to_wide()) return C._wfopen(path.to_wide(), mode.to_wide())