Skip to content

Commit bdbddd2

Browse files
expose procedure for copying environment
1 parent be72b7b commit bdbddd2

File tree

1 file changed

+17
-12
lines changed

1 file changed

+17
-12
lines changed

otherlibs/unix/createprocess.c

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
102118
value 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

Comments
 (0)