Index: native_client_sdk/src/libraries/ppapi_simple/ps_instance.cc |
diff --git a/native_client_sdk/src/libraries/ppapi_simple/ps_instance.cc b/native_client_sdk/src/libraries/ppapi_simple/ps_instance.cc |
index 3f59e08b48ac2a12b0b96e8e8bad81c6f0385856..a7dffc71181496ecd7e1c0a338bc0d2f792a91c6 100644 |
--- a/native_client_sdk/src/libraries/ppapi_simple/ps_instance.cc |
+++ b/native_client_sdk/src/libraries/ppapi_simple/ps_instance.cc |
@@ -238,6 +238,26 @@ bool PSInstance::ProcessProperties() { |
if (tty_resize) |
RegisterMessageHandler(tty_resize, MessageHandlerResizeStatic, this); |
+ char* tty_rows = getenv("PS_TTY_ROWS"); |
+ char* tty_cols = getenv("PS_TTY_COLS"); |
+ if (tty_rows && tty_cols) { |
+ char* end = tty_rows; |
+ int rows = strtol(tty_rows, &end, 10); |
+ if (*end != '\0' || rows < 0) { |
+ Error("Invalid value for PS_TTY_ROWS: %s", tty_rows); |
+ } else { |
+ end = tty_cols; |
+ int cols = strtol(tty_cols, &end, 10); |
+ if (*end != '\0' || cols < 0) |
+ Error("Invalid value for PS_TTY_COLS: %s", tty_cols); |
+ else |
+ HandleResize(cols, rows); |
+ } |
+ } |
+ else if (tty_rows || tty_cols) { |
+ Error("PS_TTY_ROWS and PS_TTY_COLS must be set together"); |
+ } |
+ |
tioc_nacl_output handler; |
handler.handler = TtyOutputHandlerStatic; |
handler.user_data = this; |
@@ -372,16 +392,22 @@ void PSInstance::MessageHandlerInput(const pp::Var& message) { |
} |
} |
+void PSInstance::HandleResize(int width, int height){ |
+ struct winsize size; |
+ memset(&size, 0, sizeof(size)); |
+ size.ws_col = width; |
+ size.ws_row = height; |
+ ioctl(tty_fd_, TIOCSWINSZ, reinterpret_cast<char*>(&size)); |
+} |
+ |
void PSInstance::MessageHandlerResize(const pp::Var& message) { |
assert(message.is_array()); |
pp::VarArray array(message); |
assert(array.GetLength() == 2); |
- struct winsize size; |
- memset(&size, 0, sizeof(size)); |
- size.ws_col = array.Get(0).AsInt(); |
- size.ws_row = array.Get(1).AsInt(); |
- ioctl(tty_fd_, TIOCSWINSZ, reinterpret_cast<char*>(&size)); |
+ int width = array.Get(0).AsInt(); |
+ int height = array.Get(1).AsInt(); |
+ HandleResize(width, height); |
} |
ssize_t PSInstance::TtyOutputHandlerStatic(const char* buf, |