Index: runtime/bin/stdio_macos.cc |
diff --git a/runtime/bin/stdin_macos.cc b/runtime/bin/stdio_macos.cc |
similarity index 62% |
rename from runtime/bin/stdin_macos.cc |
rename to runtime/bin/stdio_macos.cc |
index a8afb77ecefbc376f04a8899c12c303f6160fa93..9bb233e3689418a3e7adfa759f125bbccca75173 100644 |
--- a/runtime/bin/stdin_macos.cc |
+++ b/runtime/bin/stdio_macos.cc |
@@ -5,9 +5,11 @@ |
#include "platform/globals.h" |
#if defined(TARGET_OS_MACOS) |
+#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" |
@@ -15,51 +17,63 @@ 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 |