mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
os: add new function os.loginname(), improve some error messages (#9794)
This commit is contained in:
parent
3158617ce2
commit
9ec91f4d58
@ -267,7 +267,7 @@ fn C.wcslen(str &u16) int
|
|||||||
|
|
||||||
fn C.WideCharToMultiByte(codePage u32, dwFlags u32, lpWideCharStr &u16, cchWideChar int, lpMultiByteStr &char, cbMultiByte int, lpDefaultChar &char, lpUsedDefaultChar &int) int
|
fn C.WideCharToMultiByte(codePage u32, dwFlags u32, lpWideCharStr &u16, cchWideChar int, lpMultiByteStr &char, cbMultiByte int, lpDefaultChar &char, lpUsedDefaultChar &int) int
|
||||||
|
|
||||||
fn C._wstat(path &u16, buffer &C._stat)
|
fn C._wstat(path &u16, buffer &C._stat) int
|
||||||
|
|
||||||
fn C._wrename(oldname &u16, newname &u16) int
|
fn C._wrename(oldname &u16, newname &u16) int
|
||||||
|
|
||||||
|
@ -143,7 +143,7 @@ pub fn truncate(path string, len u64) ? {
|
|||||||
C.close(fp)
|
C.close(fp)
|
||||||
}
|
}
|
||||||
if fp < 0 {
|
if fp < 0 {
|
||||||
return error('open file failed')
|
return error_with_code(posix_get_error_msg(C.errno), C.errno)
|
||||||
}
|
}
|
||||||
$if windows {
|
$if windows {
|
||||||
if C._chsize_s(fp, len) != 0 {
|
if C._chsize_s(fp, len) != 0 {
|
||||||
@ -165,10 +165,18 @@ pub fn file_size(path string) u64 {
|
|||||||
$if x64 {
|
$if x64 {
|
||||||
$if windows {
|
$if windows {
|
||||||
mut swin := C.__stat64{}
|
mut swin := C.__stat64{}
|
||||||
C._wstat64(&char(path.to_wide()), voidptr(&swin))
|
if C._wstat64(&char(path.to_wide()), voidptr(&swin)) != 0 {
|
||||||
|
eprintln('os.file_size() Cannot determine file-size: ' +
|
||||||
|
posix_get_error_msg(C.errno))
|
||||||
|
return 0
|
||||||
|
}
|
||||||
return swin.st_size
|
return swin.st_size
|
||||||
} $else {
|
} $else {
|
||||||
C.stat(&char(path.str), &s)
|
if C.stat(&char(path.str), &s) != 0 {
|
||||||
|
eprintln('os.file_size() Cannot determine file-size: ' +
|
||||||
|
posix_get_error_msg(C.errno))
|
||||||
|
return 0
|
||||||
|
}
|
||||||
return u64(s.st_size)
|
return u64(s.st_size)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -177,10 +185,18 @@ pub fn file_size(path string) u64 {
|
|||||||
println('Using os.file_size() on 32bit systems may not work on big files.')
|
println('Using os.file_size() on 32bit systems may not work on big files.')
|
||||||
}
|
}
|
||||||
$if windows {
|
$if windows {
|
||||||
C._wstat(path.to_wide(), voidptr(&s))
|
if C._wstat(path.to_wide(), voidptr(&s)) != 0 {
|
||||||
|
eprintln('os.file_size() Cannot determine file-size: ' +
|
||||||
|
posix_get_error_msg(C.errno))
|
||||||
|
return 0
|
||||||
|
}
|
||||||
return u64(s.st_size)
|
return u64(s.st_size)
|
||||||
} $else {
|
} $else {
|
||||||
C.stat(&char(path.str), &s)
|
if C.stat(&char(path.str), &s) != 0 {
|
||||||
|
eprintln('os.file_size() Cannot determine file-size: ' +
|
||||||
|
posix_get_error_msg(C.errno))
|
||||||
|
return 0
|
||||||
|
}
|
||||||
return u64(s.st_size)
|
return u64(s.st_size)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -53,6 +53,8 @@ fn C.symlink(&char, &char) int
|
|||||||
|
|
||||||
fn C.gethostname(&char, int) int
|
fn C.gethostname(&char, int) int
|
||||||
|
|
||||||
|
fn C.getlogin_r(&char, int) int
|
||||||
|
|
||||||
pub fn uname() Uname {
|
pub fn uname() Uname {
|
||||||
mut u := Uname{}
|
mut u := Uname{}
|
||||||
utsize := sizeof(C.utsname)
|
utsize := sizeof(C.utsname)
|
||||||
@ -83,6 +85,18 @@ pub fn hostname() string {
|
|||||||
return ''
|
return ''
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn loginname() string {
|
||||||
|
mut lgnname := ''
|
||||||
|
size := 256
|
||||||
|
mut buf := unsafe { &char(malloc(size)) }
|
||||||
|
if C.getlogin_r(buf, size) == 0 {
|
||||||
|
lgnname = unsafe { cstring_to_vstring(buf) }
|
||||||
|
unsafe { free(buf) }
|
||||||
|
return lgnname
|
||||||
|
}
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
|
||||||
fn init_os_args(argc int, argv &&byte) []string {
|
fn init_os_args(argc int, argv &&byte) []string {
|
||||||
mut args_ := []string{}
|
mut args_ := []string{}
|
||||||
// mut args := []string(make(0, argc, sizeof(string)))
|
// mut args := []string(make(0, argc, sizeof(string)))
|
||||||
|
@ -394,6 +394,11 @@ pub fn hostname() string {
|
|||||||
return execute('cmd /c hostname').output
|
return execute('cmd /c hostname').output
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn loginname() string {
|
||||||
|
// TODO: use C.GetUserName(&char, u32) bool instead
|
||||||
|
return execute('cmd /c echo %USERNAME%').output
|
||||||
|
}
|
||||||
|
|
||||||
// `is_writable_folder` - `folder` exists and is writable to the process
|
// `is_writable_folder` - `folder` exists and is writable to the process
|
||||||
pub fn is_writable_folder(folder string) ?bool {
|
pub fn is_writable_folder(folder string) ?bool {
|
||||||
if !exists(folder) {
|
if !exists(folder) {
|
||||||
|
Loading…
Reference in New Issue
Block a user