os: Make windows allocations more consistent & LocalFree args_list
if max is 512 then allocate `max * sizeof(wchar_t)`pull/1299/head
parent
f8bc893972
commit
ca70d1f8a3
vlib/os
15
vlib/os/os.v
15
vlib/os/os.v
|
@ -100,6 +100,8 @@ fn init_os_args(argc int, argv *byteptr) []string {
|
||||||
for i := 0; i < args_count; i++ {
|
for i := 0; i < args_count; i++ {
|
||||||
args << string_from_wide(&u16(args_list[i]))
|
args << string_from_wide(&u16(args_list[i]))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
C.LocalFree(args_list)
|
||||||
} $else {
|
} $else {
|
||||||
for i := 0; i < argc; i++ {
|
for i := 0; i < argc; i++ {
|
||||||
args << string(argv[i])
|
args << string(argv[i])
|
||||||
|
@ -520,7 +522,7 @@ pub fn get_line() string {
|
||||||
pub fn get_raw_line() string {
|
pub fn get_raw_line() string {
|
||||||
$if windows {
|
$if windows {
|
||||||
max := 512 // MAX_PATH * sizeof(wchar_t)
|
max := 512 // MAX_PATH * sizeof(wchar_t)
|
||||||
buf := &u16(malloc(max))
|
buf := &u16(malloc(max*2))
|
||||||
h_input := C.GetStdHandle(STD_INPUT_HANDLE)
|
h_input := C.GetStdHandle(STD_INPUT_HANDLE)
|
||||||
if h_input == INVALID_HANDLE_VALUE {
|
if h_input == INVALID_HANDLE_VALUE {
|
||||||
panic('get_raw_line() error getting input handle.')
|
panic('get_raw_line() error getting input handle.')
|
||||||
|
@ -658,8 +660,9 @@ pub fn executable() string {
|
||||||
return string(result, count)
|
return string(result, count)
|
||||||
}
|
}
|
||||||
$if windows {
|
$if windows {
|
||||||
mut result := &u16(malloc(512)) // MAX_PATH * sizeof(wchar_t)
|
max := 512
|
||||||
len := int(C.GetModuleFileName( 0, result, MAX_PATH ))
|
mut result := &u16(malloc(max*2)) // MAX_PATH * sizeof(wchar_t)
|
||||||
|
len := int(C.GetModuleFileName( 0, result, max ))
|
||||||
return string_from_wide2(result, len)
|
return string_from_wide2(result, len)
|
||||||
}
|
}
|
||||||
$if mac {
|
$if mac {
|
||||||
|
@ -731,9 +734,9 @@ pub fn chdir(path string) {
|
||||||
|
|
||||||
pub fn getwd() string {
|
pub fn getwd() string {
|
||||||
$if windows {
|
$if windows {
|
||||||
max := 1024 // MAX_PATH * sizeof(wchar_t)
|
max := 512 // MAX_PATH * sizeof(wchar_t)
|
||||||
buf := &u16(malloc(max))
|
buf := &u16(malloc(max*2))
|
||||||
if C._wgetcwd(buf, max/2) == 0 {
|
if C._wgetcwd(buf, max) == 0 {
|
||||||
return ''
|
return ''
|
||||||
}
|
}
|
||||||
return string_from_wide(buf)
|
return string_from_wide(buf)
|
||||||
|
|
Loading…
Reference in New Issue