Index: runtime/bin/stdio_linux.cc |
diff --git a/runtime/bin/stdin_linux.cc b/runtime/bin/stdio_linux.cc |
similarity index 61% |
rename from runtime/bin/stdin_linux.cc |
rename to runtime/bin/stdio_linux.cc |
index c64610aed7283c00b59b4f3609b29f14312a20cd..5d1739a6b70edcb380a14d0b4f53baa169027f16 100644 |
--- a/runtime/bin/stdin_linux.cc |
+++ b/runtime/bin/stdio_linux.cc |
@@ -5,61 +5,76 @@ |
#include "platform/globals.h" |
#if defined(TARGET_OS_LINUX) |
+#include <errno.h> // NOLINT |
+#include <sys/ioctl.h> // NOLINT |
#include <termios.h> // NOLINT |
-#include "bin/stdin.h" |
+#include "bin/stdio.h" |
#include "bin/fdutils.h" |
+#include "bin/signal_blocker.h" |
namespace dart { |
namespace bin { |
int Stdin::ReadByte() { |
- FDUtils::SetBlocking(fileno(stdin)); |
+ FDUtils::SetBlocking(STDIN_FILENO); |
int c = getchar(); |
if (c == EOF) { |
c = -1; |
} |
- FDUtils::SetNonBlocking(fileno(stdin)); |
+ FDUtils::SetNonBlocking(STDIN_FILENO); |
return c; |
} |
bool Stdin::GetEchoMode() { |
struct termios term; |
- tcgetattr(fileno(stdin), &term); |
+ tcgetattr(STDIN_FILENO, &term); |
return (term.c_lflag & ECHO) != 0; |
} |
void Stdin::SetEchoMode(bool enabled) { |
struct termios term; |
- tcgetattr(fileno(stdin), &term); |
+ tcgetattr(STDIN_FILENO, &term); |
if (enabled) { |
term.c_lflag |= ECHO|ECHONL; |
} else { |
term.c_lflag &= ~(ECHO|ECHONL); |
} |
- tcsetattr(fileno(stdin), TCSANOW, &term); |
+ tcsetattr(STDIN_FILENO, TCSANOW, &term); |
} |
bool Stdin::GetLineMode() { |
struct termios term; |
- tcgetattr(fileno(stdin), &term); |
+ tcgetattr(STDIN_FILENO, &term); |
return (term.c_lflag & ICANON) != 0; |
} |
void Stdin::SetLineMode(bool enabled) { |
struct termios term; |
- tcgetattr(fileno(stdin), &term); |
+ tcgetattr(STDIN_FILENO, &term); |
if (enabled) { |
term.c_lflag |= ICANON; |
} else { |
term.c_lflag &= ~(ICANON); |
} |
- tcsetattr(fileno(stdin), TCSANOW, &term); |
+ tcsetattr(STDIN_FILENO, TCSANOW, &term); |
+} |
+ |
+ |
+bool Stdout::GetTerminalSize(int size[2]) { |
+ struct winsize w; |
+ if (TEMP_FAILURE_RETRY_BLOCK_SIGNALS( |
+ ioctl(STDOUT_FILENO, TIOCGWINSZ, &w) != 0)) { |
+ return false; |
+ } |
+ size[0] = w.ws_col; |
+ size[1] = w.ws_row; |
+ return true; |
} |
} // namespace bin |