From fc13f2c48869b469be90ad5fb606df7cbe6c9e1c Mon Sep 17 00:00:00 2001 From: Archi Date: Sat, 11 Nov 2023 14:37:08 +0100 Subject: [PATCH] Handle further linux terminal edge case We handled a situation where linux terminal is closing STDIN durng interactive console. This handles even further edge case where linux terminal is closing STDIN during user masked input. --- ArchiSteamFarm/NLog/Logging.cs | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/ArchiSteamFarm/NLog/Logging.cs b/ArchiSteamFarm/NLog/Logging.cs index c3ec1171a..d8c79fd3b 100644 --- a/ArchiSteamFarm/NLog/Logging.cs +++ b/ArchiSteamFarm/NLog/Logging.cs @@ -314,9 +314,21 @@ internal static class Logging { StringBuilder result = new(); - ConsoleKeyInfo keyInfo; + while (true) { + ConsoleKeyInfo keyInfo = Console.ReadKey(true); - while ((keyInfo = Console.ReadKey(true)).Key != ConsoleKey.Enter) { + switch (keyInfo.Key) { + case 0: + // Linux terminal closing STDIN, we're done here + return result.ToString(); + case ConsoleKey.Enter: + // User finishing input, as expected + Console.WriteLine(); + + return result.ToString(); + } + + // User continues input if (!char.IsControl(keyInfo.KeyChar)) { result.Append(keyInfo.KeyChar); Console.Write(mask); @@ -332,10 +344,6 @@ internal static class Logging { } } } - - Console.WriteLine(); - - return result.ToString(); } finally { cts.Cancel(); }