diff options
author | Ben Noordhuis <info@bnoordhuis.nl> | 2013-03-14 13:40:27 +0100 |
---|---|---|
committer | Ben Noordhuis <info@bnoordhuis.nl> | 2013-03-14 15:55:26 +0100 |
commit | e99dff461772ea16586448667860edd13b4190e4 (patch) | |
tree | 728e0b8b3aa7e44df46cce42c0f6310e7ea426d1 /deps/uv/src/unix/tty.c | |
parent | 028c630ecd920d59fc0e8ad295e0fe0eac8e1ef1 (diff) | |
download | android-node-v8-e99dff461772ea16586448667860edd13b4190e4.tar.gz android-node-v8-e99dff461772ea16586448667860edd13b4190e4.tar.bz2 android-node-v8-e99dff461772ea16586448667860edd13b4190e4.zip |
deps: upgrade libuv to 7b66ea1
Diffstat (limited to 'deps/uv/src/unix/tty.c')
-rw-r--r-- | deps/uv/src/unix/tty.c | 43 |
1 files changed, 35 insertions, 8 deletions
diff --git a/deps/uv/src/unix/tty.c b/deps/uv/src/unix/tty.c index 49efee7f53..df32e67345 100644 --- a/deps/uv/src/unix/tty.c +++ b/deps/uv/src/unix/tty.c @@ -118,25 +118,52 @@ int uv_tty_get_winsize(uv_tty_t* tty, int* width, int* height) { uv_handle_type uv_guess_handle(uv_file file) { + struct sockaddr sa; struct stat s; + socklen_t len; + int type; - if (file < 0) { + if (file < 0) return UV_UNKNOWN_HANDLE; - } - if (isatty(file)) { + if (isatty(file)) return UV_TTY; - } - if (fstat(file, &s)) { + if (fstat(file, &s)) return UV_UNKNOWN_HANDLE; - } - if (!S_ISSOCK(s.st_mode) && !S_ISFIFO(s.st_mode)) { + if (S_ISREG(s.st_mode)) return UV_FILE; + + if (S_ISCHR(s.st_mode)) + return UV_FILE; /* XXX UV_NAMED_PIPE? */ + + if (S_ISFIFO(s.st_mode)) + return UV_NAMED_PIPE; + + if (!S_ISSOCK(s.st_mode)) + return UV_UNKNOWN_HANDLE; + + len = sizeof(type); + if (getsockopt(file, SOL_SOCKET, SO_TYPE, &type, &len)) + return UV_UNKNOWN_HANDLE; + + len = sizeof(sa); + if (getsockname(file, &sa, &len)) + return UV_UNKNOWN_HANDLE; + + if (type == SOCK_DGRAM) + if (sa.sa_family == AF_INET || sa.sa_family == AF_INET6) + return UV_UDP; + + if (type == SOCK_STREAM) { + if (sa.sa_family == AF_INET || sa.sa_family == AF_INET6) + return UV_TCP; + if (sa.sa_family == AF_UNIX) + return UV_NAMED_PIPE; } - return UV_NAMED_PIPE; + return UV_UNKNOWN_HANDLE; } |