summaryrefslogtreecommitdiff
path: root/deps/uv/src/unix/tty.c
diff options
context:
space:
mode:
authorBen Noordhuis <info@bnoordhuis.nl>2013-03-14 13:40:27 +0100
committerBen Noordhuis <info@bnoordhuis.nl>2013-03-14 15:55:26 +0100
commite99dff461772ea16586448667860edd13b4190e4 (patch)
tree728e0b8b3aa7e44df46cce42c0f6310e7ea426d1 /deps/uv/src/unix/tty.c
parent028c630ecd920d59fc0e8ad295e0fe0eac8e1ef1 (diff)
downloadandroid-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.c43
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;
}