win,process: allow users to configure child error mode (#4569)
Add UV_PROCESS_WINDOWS_USE_PARENT_ERROR_MODE to allow the user to propagate user-controlled process-wide SetErrorMode to child processes (for cmake). Default behavior is unchanged.
This commit is contained in:
parent
073f3d8bc2
commit
8ad246557a
@ -1170,7 +1170,13 @@ enum uv_process_flags {
|
||||
* search for the exact file name before trying variants with
|
||||
* extensions like '.exe' or '.cmd'.
|
||||
*/
|
||||
UV_PROCESS_WINDOWS_FILE_PATH_EXACT_NAME = (1 << 7)
|
||||
UV_PROCESS_WINDOWS_FILE_PATH_EXACT_NAME = (1 << 7),
|
||||
/*
|
||||
* Spawn the child process with the error mode of its parent.
|
||||
* This option is only meaningful on Windows systems. On Unix
|
||||
* it is silently ignored.
|
||||
*/
|
||||
UV_PROCESS_WINDOWS_USE_PARENT_ERROR_MODE = (1 << 8)
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
@ -1029,7 +1029,8 @@ int uv_spawn(uv_loop_t* loop,
|
||||
UV_PROCESS_WINDOWS_HIDE |
|
||||
UV_PROCESS_WINDOWS_HIDE_CONSOLE |
|
||||
UV_PROCESS_WINDOWS_HIDE_GUI |
|
||||
UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS)));
|
||||
UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS |
|
||||
UV_PROCESS_WINDOWS_USE_PARENT_ERROR_MODE)));
|
||||
|
||||
uv__handle_init(loop, (uv_handle_t*)process, UV_PROCESS);
|
||||
uv__queue_init(&process->queue);
|
||||
|
||||
@ -941,7 +941,8 @@ int uv_spawn(uv_loop_t* loop,
|
||||
UV_PROCESS_WINDOWS_HIDE |
|
||||
UV_PROCESS_WINDOWS_HIDE_CONSOLE |
|
||||
UV_PROCESS_WINDOWS_HIDE_GUI |
|
||||
UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS)));
|
||||
UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS |
|
||||
UV_PROCESS_WINDOWS_USE_PARENT_ERROR_MODE)));
|
||||
|
||||
err = uv__utf8_to_utf16_alloc(options->file, &application);
|
||||
if (err)
|
||||
@ -1040,6 +1041,10 @@ int uv_spawn(uv_loop_t* loop,
|
||||
|
||||
process_flags = CREATE_UNICODE_ENVIRONMENT | CREATE_DEFAULT_ERROR_MODE;
|
||||
|
||||
if (options->flags & UV_PROCESS_WINDOWS_USE_PARENT_ERROR_MODE) {
|
||||
process_flags &= ~(CREATE_DEFAULT_ERROR_MODE);
|
||||
}
|
||||
|
||||
if ((options->flags & UV_PROCESS_WINDOWS_HIDE_CONSOLE) ||
|
||||
(options->flags & UV_PROCESS_WINDOWS_HIDE)) {
|
||||
/* Avoid creating console window if stdio is not inherited. */
|
||||
|
||||
Loading…
Reference in New Issue
Block a user