Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/PowerShell/PowerShell.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/System.Management.Automation/engine/Modules/SwitchProcessCommand.cs8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/System.Management.Automation/engine/Modules/SwitchProcessCommand.cs b/src/System.Management.Automation/engine/Modules/SwitchProcessCommand.cs
index 5e0cee6684..5734518231 100644
--- a/src/System.Management.Automation/engine/Modules/SwitchProcessCommand.cs
+++ b/src/System.Management.Automation/engine/Modules/SwitchProcessCommand.cs
@@ -69,10 +69,12 @@ namespace Microsoft.PowerShell.Commands
// need null terminator at end
execArgs[execArgs.Length - 1] = null;
+ // setup termios for a child process as .NET modifies termios dynamically for use with ReadKey()
+ ConfigureTerminalForChildProcess(true);
int exitCode = Exec(command.Source, execArgs);
-
if (exitCode < 0)
{
+ ConfigureTerminalForChildProcess(false);
ThrowTerminatingError(
new ErrorRecord(
new Exception(
@@ -108,6 +110,10 @@ namespace Microsoft.PowerShell.Commands
CharSet = CharSet.Ansi,
SetLastError = true)]
private static extern int Exec(string path, string?[] args);
+
+ // leverage .NET runtime's native library which abstracts the need to handle different OS and architectures for termios api
+ [DllImport("libSystem.Native", EntryPoint = "SystemNative_ConfigureTerminalForChildProcess")]
+ private static extern void ConfigureTerminalForChildProcess([MarshalAs(UnmanagedType.Bool)] bool childUsesTerminal);
}
}