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

os: mkdir() error handling

This commit is contained in:
Don Alfons Nisnoni 2019-11-24 00:55:18 +08:00 committed by Alexander Medvednikov
parent 0fb0c43c0a
commit 3a6ccf7f31
12 changed files with 32 additions and 32 deletions

View File

@ -196,7 +196,7 @@ fn (gen_vc mut GenVC) generate() {
// check if gen_vc dir exists // check if gen_vc dir exists
if !os.dir_exists(gen_vc.options.work_dir) { if !os.dir_exists(gen_vc.options.work_dir) {
// try create // try create
os.mkdir(gen_vc.options.work_dir) os.mkdir(gen_vc.options.work_dir) or { panic(err) }
// still dosen't exist... we have a problem // still dosen't exist... we have a problem
if !os.dir_exists(gen_vc.options.work_dir) { if !os.dir_exists(gen_vc.options.work_dir) {
gen_vc.logger.error('error creating directory: $gen_vc.options.work_dir') gen_vc.logger.error('error creating directory: $gen_vc.options.work_dir')

View File

@ -48,7 +48,7 @@ fn main() {
c.description = os.get_line() c.description = os.get_line()
println('Initialising ...') println('Initialising ...')
if (os.is_dir(c.name)) { cerror('folder already exists') exit(3) } if (os.is_dir(c.name)) { cerror('folder already exists') exit(3) }
os.mkdir(c.name) os.mkdir(c.name) or { panic(err) }
c.write_vmod() c.write_vmod()
c.write_main() c.write_main()
println('Complete !') println('Complete !')

View File

@ -154,7 +154,7 @@ fn ensure_vmodules_dir_exist() {
home_vmodules := get_vmodules_dir_path() home_vmodules := get_vmodules_dir_path()
if !os.dir_exists( home_vmodules ) { if !os.dir_exists( home_vmodules ) {
println('Creating $home_vmodules/ ...') println('Creating $home_vmodules/ ...')
os.mkdir(home_vmodules) os.mkdir(home_vmodules) or { panic(err) }
} }
} }

View File

@ -108,7 +108,7 @@ fn (v mut V) cc() {
} }
if v.pref.ccompiler == 'cc' && os.file_exists(tcc_path) { if v.pref.ccompiler == 'cc' && os.file_exists(tcc_path) {
// TODO tcc bug, needs an empty libtcc1.a fila // TODO tcc bug, needs an empty libtcc1.a fila
//os.mkdir('/var/tmp/tcc/lib/tcc/') //os.mkdir('/var/tmp/tcc/lib/tcc/') or { panic(err) }
//os.create('/var/tmp/tcc/lib/tcc/libtcc1.a') //os.create('/var/tmp/tcc/lib/tcc/libtcc1.a')
v.pref.ccompiler = tcc_path v.pref.ccompiler = tcc_path
a << '-m64' a << '-m64'

View File

@ -843,8 +843,8 @@ pub fn (v &V) log(s string) {
pub fn new_v(args[]string) &V { pub fn new_v(args[]string) &V {
// Create modules dirs if they are missing // Create modules dirs if they are missing
if !os.dir_exists(v_modules_path) { if !os.dir_exists(v_modules_path) {
os.mkdir(v_modules_path) os.mkdir(v_modules_path) or { panic(err) }
os.mkdir('$v_modules_path${os.path_separator}cache') os.mkdir('$v_modules_path${os.path_separator}cache') or { panic(err) }
} }
// Location of all vlib files // Location of all vlib files
@ -903,7 +903,7 @@ pub fn new_v(args[]string) &V {
// Cross compiling? Use separate dirs for each os // Cross compiling? Use separate dirs for each os
/* /*
if target_os != os.user_os() { if target_os != os.user_os() {
os.mkdir('$TmpPath/vlib/$target_os') os.mkdir('$TmpPath/vlib/$target_os') or { panic(err) }
out_name = '$TmpPath/vlib/$target_os/${base}.o' out_name = '$TmpPath/vlib/$target_os/${base}.o'
println('target_os=$target_os user_os=${os.user_os()}') println('target_os=$target_os user_os=${os.user_os()}')
println('!Cross compiling $out_name') println('!Cross compiling $out_name')
@ -939,7 +939,7 @@ pub fn new_v(args[]string) &V {
d := out_name.all_before_last(os.path_separator) d := out_name.all_before_last(os.path_separator)
if !os.dir_exists(d) { if !os.dir_exists(d) {
println('creating a new directory "$d"') println('creating a new directory "$d"')
os.mkdir(d) os.mkdir(d) or { panic(err) }
} }
} }
mut _os := OS.mac mut _os := OS.mac

View File

@ -36,7 +36,7 @@ fn generate_vh(mod string) {
pdir := dir.all_before_last(os.path_separator) pdir := dir.all_before_last(os.path_separator)
if !os.dir_exists(pdir) { if !os.dir_exists(pdir) {
os.mkdir_all(pdir) os.mkdir_all(pdir)
// os.mkdir(os.realpath(dir)) // os.mkdir(os.realpath(dir)) or { panic(err) }
} }
out := os.create(path) or { panic(err) } out := os.create(path) or { panic(err) }
mod_path := mod.replace("\\", "/") mod_path := mod.replace("\\", "/")
@ -169,5 +169,3 @@ fn (g mut VhGen) generate_type() {
//g.i = old //g.i = old
//g.i-- //g.i--
} }

View File

@ -10,7 +10,7 @@ import filepath
pub fn get_vtmp_folder() string { pub fn get_vtmp_folder() string {
vtmp := filepath.join(os.tmpdir(),'v') vtmp := filepath.join(os.tmpdir(),'v')
if !os.dir_exists( vtmp ) { if !os.dir_exists( vtmp ) {
os.mkdir(vtmp) os.mkdir(vtmp) or { panic(err) }
} }
return vtmp return vtmp
} }

View File

@ -198,7 +198,7 @@ pub fn cp_r(osource_path, odest_path string, overwrite bool) ?bool{
sp := filepath.join(source_path, file) sp := filepath.join(source_path, file)
dp := filepath.join(dest_path, file) dp := filepath.join(dest_path, file)
if os.is_dir(sp) { if os.is_dir(sp) {
os.mkdir(dp) os.mkdir(dp) or { panic(err) }
} }
cp_r(sp, dp, overwrite) or { cp_r(sp, dp, overwrite) or {
os.rmdir(dp) os.rmdir(dp)
@ -991,7 +991,7 @@ pub fn mkdir_all(path string) {
for subdir in path.split(os.path_separator) { for subdir in path.split(os.path_separator) {
p += subdir + os.path_separator p += subdir + os.path_separator
if !os.dir_exists(p) { if !os.dir_exists(p) {
os.mkdir(p) os.mkdir(p) or { panic(err) }
} }
} }
} }

View File

@ -61,12 +61,14 @@ pub fn dir_exists(path string) bool {
} }
// mkdir creates a new directory with the specified path. // mkdir creates a new directory with the specified path.
pub fn mkdir(path string) { pub fn mkdir(path string) ?bool {
//$if linux { if path == '.' { return true }
//C.syscall(83, path.str, 511) // sys_mkdir apath := os.realpath( path )
//} $else { r := int(C.mkdir(apath.str, 511))
C.mkdir(path.str, 511)// S_IRWXU | S_IRWXG | S_IRWXO if r == -1 {
//} return error(get_error_msg(C.errno))
}
return true
} }
// exec starts the specified command, waits for it to complete, and returns its output. // exec starts the specified command, waits for it to complete, and returns its output.

View File

@ -75,7 +75,7 @@ fn test_write_and_read_bytes() {
fn test_create_and_delete_folder() { fn test_create_and_delete_folder() {
folder := './test1' folder := './test1'
os.mkdir(folder) os.mkdir(folder) or { panic(err) }
assert os.dir_exists(folder) assert os.dir_exists(folder)
folder_contents := os.ls(folder) or { panic(err) } folder_contents := os.ls(folder) or { panic(err) }
@ -106,7 +106,7 @@ fn walk_callback(file string) {
fn test_walk() { fn test_walk() {
folder := 'test_walk' folder := 'test_walk'
os.mkdir(folder) os.mkdir(folder) or { panic(err) }
file1 := folder+os.path_separator+'test1' file1 := folder+os.path_separator+'test1'
@ -137,12 +137,12 @@ fn test_cp_r() {
//fileX -> dir/fileX //fileX -> dir/fileX
// NB: clean up of the files happens inside the cleanup_leftovers function // NB: clean up of the files happens inside the cleanup_leftovers function
os.write_file('ex1.txt', 'wow!') os.write_file('ex1.txt', 'wow!')
os.mkdir('ex') os.mkdir('ex') or { panic(err) }
os.cp_r('ex1.txt', 'ex', false) or { panic(err) } os.cp_r('ex1.txt', 'ex', false) or { panic(err) }
old := os.read_file('ex1.txt') or { panic(err) } old := os.read_file('ex1.txt') or { panic(err) }
new := os.read_file('ex/ex1.txt') or { panic(err) } new := os.read_file('ex/ex1.txt') or { panic(err) }
assert old == new assert old == new
os.mkdir('ex/ex2') os.mkdir('ex/ex2') or { panic(err) }
os.write_file('ex2.txt', 'great!') os.write_file('ex2.txt', 'great!')
os.cp_r('ex2.txt', 'ex/ex2', false) or { panic(err) } os.cp_r('ex2.txt', 'ex/ex2', false) or { panic(err) }
old2 := os.read_file('ex2.txt') or { panic(err) } old2 := os.read_file('ex2.txt') or { panic(err) }

View File

@ -131,14 +131,14 @@ pub fn dir_exists(path string) bool {
} }
// mkdir creates a new directory with the specified path. // mkdir creates a new directory with the specified path.
pub fn mkdir(path string) { pub fn mkdir(path string) ?bool {
_path := path.replace('/', '\\') if path == '.' { return true }
// Windows doesnt recursively create the folders apath := os.realpath( path )
// so we need to help it out here r := int(C.CreateDirectory(apath.to_wide(), 0))
if _path.last_index('\\') != -1 { if r == 0 {
mkdir(_path.all_before_last('\\')) return error('mkdir failed for "$apath", because CreateDirectory returned ' + get_error_msg(int(C.GetLastError())))
} }
C.CreateDirectory(_path.to_wide(), 0) return true
} }
// Ref - https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/get-osfhandle?view=vs-2019 // Ref - https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/get-osfhandle?view=vs-2019

View File

@ -103,7 +103,7 @@ fn (am mut AssetManager) combine(asset_type string, to_file bool) string {
return out return out
} }
if !os.dir_exists(am.cache_dir) { if !os.dir_exists(am.cache_dir) {
os.mkdir(am.cache_dir) os.mkdir(am.cache_dir) or { panic(err) }
} }
file := os.create(out_file) or { file := os.create(out_file) or {
panic(err) panic(err)