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

os: add os.symlink() function

This commit is contained in:
Don Alfons Nisnoni 2019-12-28 02:10:06 +08:00 committed by Alexander Medvednikov
parent 7518d2d0dc
commit 06fba73ab9
4 changed files with 28 additions and 1 deletions

View File

@ -23,7 +23,6 @@ struct C.dirent {
fn C.readdir(voidptr) C.dirent fn C.readdir(voidptr) C.dirent
pub const ( pub const (
args = []string args = []string
MAX_PATH = 4096 MAX_PATH = 4096

View File

@ -6,6 +6,8 @@ pub const (
path_separator = '/' path_separator = '/'
) )
fn C.symlink(charptr, charptr) int
pub fn init_os_args(argc int, argv &byteptr) []string { pub fn init_os_args(argc int, argv &byteptr) []string {
mut args := []string mut args := []string
for i in 0 .. argc { for i in 0 .. argc {
@ -98,3 +100,8 @@ pub fn exec(cmd string) ?Result {
} }
} }
pub fn symlink(origin, target string) ?bool {
res := C.symlink(origin.str, target.str)
if res == 0 { return true }
return error(get_error_msg(C.errno))
}

View File

@ -237,3 +237,14 @@ fn cleanup_leftovers(){
os.rm('ex1.txt') os.rm('ex1.txt')
os.rm('ex2.txt') os.rm('ex2.txt')
} }
fn test_symlink() {
$if windows { return }
os.mkdir('symlink') or { panic(err) }
os.symlink('symlink', 'symlink2') or { panic(err) }
assert os.exists('symlink2')
// cleanup
os.rm('symlink')
os.rm('symlink2')
}

View File

@ -285,3 +285,13 @@ pub fn exec(cmd string) ?Result {
exit_code: int(exit_code) exit_code: int(exit_code)
} }
} }
fn C.CreateSymbolicLinkW(&u16, &u16, u32) int
pub fn symlink(origin, target string) ?bool {
flags := if os.is_dir(origin) { 1 } else { 0 }
if C.CreateSymbolicLinkW(origin.to_wide(), target.to_wide(), u32(flags)) != 0 {
return true
}
return error(get_error_msg(int(C.GetLastError())))
}