| Index: runtime/bin/stdio_linux.cc
|
| diff --git a/runtime/bin/stdio_linux.cc b/runtime/bin/stdio_linux.cc
|
| index 280c75fe7df45ddcf3dded883031cfd7ffc47b30..dd61fae84348dc5796674adf4dc612cb18794b88 100644
|
| --- a/runtime/bin/stdio_linux.cc
|
| +++ b/runtime/bin/stdio_linux.cc
|
| @@ -19,50 +19,67 @@
|
| namespace dart {
|
| namespace bin {
|
|
|
| -int Stdin::ReadByte() {
|
| +bool Stdin::ReadByte(int* byte) {
|
| int c = NO_RETRY_EXPECTED(getchar());
|
| - if (c == EOF) {
|
| - c = -1;
|
| + if ((c == EOF) && (errno != 0)) {
|
| + return false;
|
| }
|
| - return c;
|
| + *byte = (c == EOF) ? -1 : c;
|
| + return true;
|
| }
|
|
|
|
|
| -bool Stdin::GetEchoMode() {
|
| +bool Stdin::GetEchoMode(bool* enabled) {
|
| struct termios term;
|
| - VOID_NO_RETRY_EXPECTED(tcgetattr(STDIN_FILENO, &term));
|
| - return ((term.c_lflag & ECHO) != 0);
|
| + int status = NO_RETRY_EXPECTED(tcgetattr(STDIN_FILENO, &term));
|
| + if (status != 0) {
|
| + return false;
|
| + }
|
| + *enabled = ((term.c_lflag & ECHO) != 0);
|
| + return true;
|
| }
|
|
|
|
|
| -void Stdin::SetEchoMode(bool enabled) {
|
| +bool Stdin::SetEchoMode(bool enabled) {
|
| struct termios term;
|
| - VOID_NO_RETRY_EXPECTED(tcgetattr(STDIN_FILENO, &term));
|
| + int status = NO_RETRY_EXPECTED(tcgetattr(STDIN_FILENO, &term));
|
| + if (status != 0) {
|
| + return false;
|
| + }
|
| if (enabled) {
|
| term.c_lflag |= (ECHO | ECHONL);
|
| } else {
|
| term.c_lflag &= ~(ECHO | ECHONL);
|
| }
|
| - VOID_NO_RETRY_EXPECTED(tcsetattr(STDIN_FILENO, TCSANOW, &term));
|
| + status = NO_RETRY_EXPECTED(tcsetattr(STDIN_FILENO, TCSANOW, &term));
|
| + return (status == 0);
|
| }
|
|
|
|
|
| -bool Stdin::GetLineMode() {
|
| +bool Stdin::GetLineMode(bool* enabled) {
|
| struct termios term;
|
| - VOID_NO_RETRY_EXPECTED(tcgetattr(STDIN_FILENO, &term));
|
| - return ((term.c_lflag & ICANON) != 0);
|
| + int status = NO_RETRY_EXPECTED(tcgetattr(STDIN_FILENO, &term));
|
| + if (status != 0) {
|
| + return false;
|
| + }
|
| + *enabled = ((term.c_lflag & ICANON) != 0);
|
| + return true;
|
| }
|
|
|
|
|
| -void Stdin::SetLineMode(bool enabled) {
|
| +bool Stdin::SetLineMode(bool enabled) {
|
| struct termios term;
|
| - VOID_NO_RETRY_EXPECTED(tcgetattr(STDIN_FILENO, &term));
|
| + int status = NO_RETRY_EXPECTED(tcgetattr(STDIN_FILENO, &term));
|
| + if (status != 0) {
|
| + return false;
|
| + }
|
| if (enabled) {
|
| term.c_lflag |= ICANON;
|
| } else {
|
| term.c_lflag &= ~(ICANON);
|
| }
|
| - VOID_NO_RETRY_EXPECTED(tcsetattr(STDIN_FILENO, TCSANOW, &term));
|
| + status = NO_RETRY_EXPECTED(tcsetattr(STDIN_FILENO, TCSANOW, &term));
|
| + return (status == 0);
|
| }
|
|
|
|
|
|
|