|
@@ -239,6 +239,7 @@ bool SDL_SYS_CreateProcessWithProperties(SDL_Process *process, SDL_PropertiesID
|
|
|
const char * const *args = SDL_GetPointerProperty(props, SDL_PROP_PROCESS_CREATE_ARGS_POINTER, NULL);
|
|
|
SDL_Environment *env = SDL_GetPointerProperty(props, SDL_PROP_PROCESS_CREATE_ENVIRONMENT_POINTER, SDL_GetEnvironment());
|
|
|
char **envp = NULL;
|
|
|
+ const char *working_directory = SDL_GetStringProperty(props, SDL_PROP_PROCESS_CREATE_WORKING_DIRECTORY_STRING, NULL);
|
|
|
SDL_ProcessIO stdin_option = (SDL_ProcessIO)SDL_GetNumberProperty(props, SDL_PROP_PROCESS_CREATE_STDIN_NUMBER, SDL_PROCESS_STDIO_NULL);
|
|
|
SDL_ProcessIO stdout_option = (SDL_ProcessIO)SDL_GetNumberProperty(props, SDL_PROP_PROCESS_CREATE_STDOUT_NUMBER, SDL_PROCESS_STDIO_INHERITED);
|
|
|
SDL_ProcessIO stderr_option = (SDL_ProcessIO)SDL_GetNumberProperty(props, SDL_PROP_PROCESS_CREATE_STDERR_NUMBER, SDL_PROCESS_STDIO_INHERITED);
|
|
@@ -246,6 +247,7 @@ bool SDL_SYS_CreateProcessWithProperties(SDL_Process *process, SDL_PropertiesID
|
|
|
!SDL_HasProperty(props, SDL_PROP_PROCESS_CREATE_STDERR_NUMBER);
|
|
|
LPWSTR createprocess_cmdline = NULL;
|
|
|
LPWSTR createprocess_env = NULL;
|
|
|
+ LPWSTR createprocess_cwd = NULL;
|
|
|
STARTUPINFOW startup_info;
|
|
|
DWORD creation_flags;
|
|
|
SECURITY_ATTRIBUTES security_attributes;
|
|
@@ -292,6 +294,13 @@ bool SDL_SYS_CreateProcessWithProperties(SDL_Process *process, SDL_PropertiesID
|
|
|
goto done;
|
|
|
}
|
|
|
|
|
|
+ if (working_directory) {
|
|
|
+ createprocess_cwd = WIN_UTF8ToStringW(working_directory);
|
|
|
+ if (!createprocess_cwd) {
|
|
|
+ goto done;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// Background processes don't have access to the terminal
|
|
|
// This isn't necessary on Windows, but we keep the same behavior as the POSIX implementation.
|
|
|
if (process->background) {
|
|
@@ -427,7 +436,7 @@ bool SDL_SYS_CreateProcessWithProperties(SDL_Process *process, SDL_PropertiesID
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (!CreateProcessW(NULL, createprocess_cmdline, NULL, NULL, TRUE, creation_flags, createprocess_env, NULL, &startup_info, &data->process_information)) {
|
|
|
+ if (!CreateProcessW(NULL, createprocess_cmdline, NULL, NULL, TRUE, creation_flags, createprocess_env, createprocess_cwd, &startup_info, &data->process_information)) {
|
|
|
WIN_SetError("CreateProcess");
|
|
|
goto done;
|
|
|
}
|
|
@@ -479,6 +488,7 @@ done:
|
|
|
}
|
|
|
SDL_free(createprocess_cmdline);
|
|
|
SDL_free(createprocess_env);
|
|
|
+ SDL_free(createprocess_cwd);
|
|
|
SDL_free(envp);
|
|
|
|
|
|
if (!result) {
|