mirror of
https://github.com/vlang/v.git
synced 2025-09-10 07:47:20 -04:00
parent
30c21a0fdc
commit
9fb0f8b5aa
@ -1,5 +1,3 @@
|
|||||||
// vtest flaky: true
|
|
||||||
// vtest retry: 3
|
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
|
|
||||||
@ -63,8 +61,22 @@ fn test_set_work_folder() {
|
|||||||
assert new_parent_work_folder != child_work_folder
|
assert new_parent_work_folder != child_work_folder
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_done() {
|
fn test_set_environment() {
|
||||||
exit(0)
|
mut p := os.new_process(test_os_process)
|
||||||
|
p.set_args(['-show_env', '-target', 'stdout'])
|
||||||
|
p.set_environment({
|
||||||
|
'V_OS_TEST_PORT': '1234567890'
|
||||||
|
})
|
||||||
|
p.set_redirect_stdio()
|
||||||
|
p.wait()
|
||||||
|
assert p.code == 0
|
||||||
|
output := p.stdout_slurp().trim_space()
|
||||||
|
p.close()
|
||||||
|
$if trace_process_output ? {
|
||||||
|
eprintln('p output: "${output}"')
|
||||||
|
}
|
||||||
|
dump(output)
|
||||||
|
assert output.contains('V_OS_TEST_PORT=1234567890')
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_run() {
|
fn test_run() {
|
||||||
|
@ -124,8 +124,38 @@ fn (mut p Process) win_spawn_process() int {
|
|||||||
to_be_freed << work_folder_ptr
|
to_be_freed << work_folder_ptr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mut env_block := []u16{}
|
||||||
|
if p.env.len > 0 {
|
||||||
|
mut env_ptr := &u16(unsafe { nil })
|
||||||
|
|
||||||
|
for e in p.env {
|
||||||
|
// e should in `ABC=123` format
|
||||||
|
env_ptr = e.to_wide()
|
||||||
|
if isnil(env_ptr) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
mut i := 0
|
||||||
|
for {
|
||||||
|
character := unsafe { env_ptr[i] }
|
||||||
|
if character == 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
env_block << character
|
||||||
|
i++
|
||||||
|
}
|
||||||
|
env_block << u16(0)
|
||||||
|
to_be_freed << env_ptr
|
||||||
|
}
|
||||||
|
env_block << u16(0)
|
||||||
|
creation_flags |= C.CREATE_UNICODE_ENVIRONMENT
|
||||||
|
defer {
|
||||||
|
unsafe { env_block.free() }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
create_process_ok := C.CreateProcessW(0, voidptr(&wdata.command_line[0]), 0, 0, C.TRUE,
|
create_process_ok := C.CreateProcessW(0, voidptr(&wdata.command_line[0]), 0, 0, C.TRUE,
|
||||||
creation_flags, 0, work_folder_ptr, voidptr(&start_info), voidptr(&wdata.proc_info))
|
creation_flags, if env_block.len > 0 { env_block.data } else { 0 }, work_folder_ptr,
|
||||||
|
voidptr(&start_info), voidptr(&wdata.proc_info))
|
||||||
failed_cfn_report_error(create_process_ok, 'CreateProcess')
|
failed_cfn_report_error(create_process_ok, 'CreateProcess')
|
||||||
if p.use_stdio_ctl {
|
if p.use_stdio_ctl {
|
||||||
close_valid_handle(&wdata.child_stdout_write)
|
close_valid_handle(&wdata.child_stdout_write)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user