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

builder: add a verror, when the output folder is not existing and writable (#5966)

This commit is contained in:
dils2k
2020-08-03 20:19:36 +05:00
committed by GitHub
parent 3e4df7f140
commit 8dede3b535
4 changed files with 52 additions and 18 deletions

View File

@@ -511,23 +511,6 @@ pub fn is_executable(path string) bool {
return C.access(charptr(path.str), x_ok) != -1
}
// `is_writable_folder` - `folder` exists and is writable to the process
pub fn is_writable_folder(folder string) ?bool {
if !os.exists(folder) {
return error('`$folder` does not exist')
}
if !os.is_dir(folder) {
return error('`folder` is not a folder')
}
tmp_perm_check := os.join_path(folder, 'tmp_perm_check')
mut f := os.open_file(tmp_perm_check, 'w+', 0o700) or {
return error('cannot write to folder `$folder`: $err')
}
f.close()
os.rm(tmp_perm_check)
return true
}
// `is_writable` returns `true` if `path` is writable.
pub fn is_writable(path string) bool {
$if windows {
@@ -638,7 +621,7 @@ pub fn dir(path string) string {
pub fn base_dir(path string) string {
posx := path.last_index(path_separator) or {
return path
return path.clone()
}
// NB: *without* terminating /
return path[..posx]

View File

@@ -190,3 +190,24 @@ pub fn (mut f File) close() {
pub fn debugger_present() bool {
return false
}
fn C.mkstemp(stemplate byteptr) int
// `is_writable_folder` - `folder` exists and is writable to the process
pub fn is_writable_folder(folder string) ?bool {
if !os.exists(folder) {
return error('`$folder` does not exist')
}
if !os.is_dir(folder) {
return error('`folder` is not a folder')
}
tmp_perm_check := os.join_path(folder, 'XXXXXX')
unsafe {
x := C.mkstemp(tmp_perm_check.str)
if -1 == x {
return error('folder `$folder` is not writable')
}
C.close(x)
}
os.rm(tmp_perm_check)
return true
}

View File

@@ -366,3 +366,21 @@ pub fn uname() Uname {
machine: unknown
}
}
// `is_writable_folder` - `folder` exists and is writable to the process
pub fn is_writable_folder(folder string) ?bool {
if !os.exists(folder) {
return error('`$folder` does not exist')
}
if !os.is_dir(folder) {
return error('`folder` is not a folder')
}
tmp_perm_check := os.join_path(folder, 'tmp_perm_check')
mut f := os.open_file(tmp_perm_check, 'w+', 0o700) or {
return error('cannot write to folder $folder: $err')
}
f.close()
os.rm(tmp_perm_check)
return true
}