Commit 84de5e81 authored by Michael Goderbauer's avatar Michael Goderbauer Committed by GitHub

Work around for dart-lang/sdk#28599 (#7786)

parent 236e8137
......@@ -59,6 +59,7 @@ export 'dart:io'
ServerSocket,
stderr,
stdin,
StdinException,
stdout,
Socket,
SocketException,
......
......@@ -217,12 +217,14 @@ class AnsiTerminal {
static const int _ENOTTY = 25;
static const int _ENETRESET = 102;
static const int _ERROR_INVALID_PARAMETER = 87;
/// Setting the line mode can throw for some terminals (with "Operation not
/// supported on socket"), but the error can be safely ignored.
static const List<int> _lineModeIgnorableErrors = const <int>[
_ENOTTY,
_ENETRESET,
_ERROR_INVALID_PARAMETER, // TODO(goderbauer): remove when https://github.com/dart-lang/sdk/issues/28599 is fixed
];
bool supportsColor;
......@@ -234,17 +236,8 @@ class AnsiTerminal {
set singleCharMode(bool value) {
try {
stdin.lineMode = !value;
} catch (error) {
// TODO(tvolkert): Change this to explicitly catch `StdinException`
// once our analysis runs against SDK 1.22 (when `StdinException` was
// introduced). Doing so will allow proper dereferencing of `osError`.
bool ignore = false;
try {
if (_lineModeIgnorableErrors.contains(error.osError?.errorCode)) {
ignore = true;
}
} on NoSuchMethodError {}
if (!ignore)
} on StdinException catch (error) {
if (!_lineModeIgnorableErrors.contains(error.osError?.errorCode))
rethrow;
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment