diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2011-09-12 14:53:27 -0700 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2011-09-12 15:09:26 -0700 |
commit | 51f2e8439e4e26f7f3b58193112916c711085c91 (patch) | |
tree | d7c44ac5e27c8e58c0fc3703b5a5ce7f2b81fd51 /deps/uv/src/unix/tty.c | |
parent | 77e4abbc3e66505af89c57cd7bff555890a33f3f (diff) | |
download | android-node-v8-51f2e8439e4e26f7f3b58193112916c711085c91.tar.gz android-node-v8-51f2e8439e4e26f7f3b58193112916c711085c91.tar.bz2 android-node-v8-51f2e8439e4e26f7f3b58193112916c711085c91.zip |
Upgrade libuv to e7eeacb
Diffstat (limited to 'deps/uv/src/unix/tty.c')
-rw-r--r-- | deps/uv/src/unix/tty.c | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/deps/uv/src/unix/tty.c b/deps/uv/src/unix/tty.c new file mode 100644 index 0000000000..3ceeb5f1c0 --- /dev/null +++ b/deps/uv/src/unix/tty.c @@ -0,0 +1,69 @@ +/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +#include "uv.h" +#include "internal.h" + +#include <assert.h> +#include <termios.h> +#include <errno.h> + + +int uv_tty_init(uv_loop_t* loop, uv_tty_t* tty, int fd) { + uv__nonblock(fd, 1); + uv__stream_init(loop, (uv_stream_t*)tty, UV_TTY); + uv__stream_open((uv_stream_t*)tty, fd, UV_READABLE | UV_WRITABLE); + loop->counters.tty_init++; + return 0; +} + + +int uv_tty_set_mode(uv_tty_t* tty, int mode) { + int fd = tty->fd; + struct termios orig_termios; /* in order to restore at exit */ + struct termios raw; + + if (tcgetattr(fd, &orig_termios) == -1) goto fatal; + + raw = orig_termios; /* modify the original mode */ + /* input modes: no break, no CR to NL, no parity check, no strip char, + * no start/stop output control. */ + raw.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON); + /* output modes */ + raw.c_oflag |= (ONLCR); + /* control modes - set 8 bit chars */ + raw.c_cflag |= (CS8); + /* local modes - echoing off, canonical off, no extended functions, + * no signal chars (^Z,^C) */ + raw.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG); + /* control chars - set return condition: min number of bytes and timer. + * We want read to return every single byte, without timeout. */ + raw.c_cc[VMIN] = 1; raw.c_cc[VTIME] = 0; /* 1 byte, no timer */ + + /* put terminal in raw mode after flushing */ + if (tcsetattr(fd, TCSAFLUSH, &raw) < 0) goto fatal; + return 0; + +fatal: + uv_err_new(tty->loop, ENOTTY); + return -1; +} + |