mirror of
https://github.com/vlang/v.git
synced 2025-09-09 15:27:05 -04:00
parent
30c21a0fdc
commit
9fb0f8b5aa
@ -1,5 +1,3 @@
|
||||
// vtest flaky: true
|
||||
// vtest retry: 3
|
||||
import os
|
||||
import time
|
||||
|
||||
@ -63,8 +61,22 @@ fn test_set_work_folder() {
|
||||
assert new_parent_work_folder != child_work_folder
|
||||
}
|
||||
|
||||
fn test_done() {
|
||||
exit(0)
|
||||
fn test_set_environment() {
|
||||
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() {
|
||||
|
@ -124,8 +124,38 @@ fn (mut p Process) win_spawn_process() int {
|
||||
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,
|
||||
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')
|
||||
if p.use_stdio_ctl {
|
||||
close_valid_handle(&wdata.child_stdout_write)
|
||||
|
Loading…
x
Reference in New Issue
Block a user