@@ -99,6 +99,22 @@ static DWORD do_create_process_native(wchar_t * exefile, wchar_t * cmdline,
9999 return err ;
100100}
101101
102+ void copy_env (value env , wchar_t * wenv )
103+ {
104+ if (Is_some (env )) {
105+ env = Some_val (env );
106+ size =
107+ caml_win32_multi_byte_to_wide_char (String_val (env ),
108+ caml_string_length (env ), NULL , 0 );
109+ wenv = caml_stat_alloc ((size + 1 )* sizeof (wchar_t ));
110+ caml_win32_multi_byte_to_wide_char (String_val (env ),
111+ caml_string_length (env ), wenv , size );
112+ wenv [size ] = 0 ;
113+ } else {
114+ wenv = NULL ;
115+ }
116+ }
117+
102118value caml_unix_create_process_native (value cmd , value cmdline , value env ,
103119 value fd1 , value fd2 , value fd3 )
104120{
@@ -117,18 +133,7 @@ value caml_unix_create_process_native(value cmd, value cmdline, value env,
117133 caml_stat_free (wcmd );
118134 wcmdline = caml_stat_strdup_to_utf16 (String_val (cmdline ));
119135
120- if (Is_some (env )) {
121- env = Some_val (env );
122- size =
123- caml_win32_multi_byte_to_wide_char (String_val (env ),
124- caml_string_length (env ), NULL , 0 );
125- wenv = caml_stat_alloc ((size + 1 )* sizeof (wchar_t ));
126- caml_win32_multi_byte_to_wide_char (String_val (env ),
127- caml_string_length (env ), wenv , size );
128- wenv [size ] = 0 ;
129- } else {
130- wenv = NULL ;
131- }
136+ copy_env (env , wenv );
132137
133138 err =
134139 do_create_process_native (exefile , wcmdline , wenv , Handle_val (fd1 ),
0 commit comments