From 9e641d251fa48c74faabd2b5506f8d972bdb93f3 Mon Sep 17 00:00:00 2001 From: John Barboza Date: Sun, 24 Jul 2016 21:54:08 -0400 Subject: [PATCH] zos: implement uv__io_check_fd MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This method uses the poll syscall to determine whether POLLNVAL is flagged or not. PR-URL: https://github.com/libuv/libuv/pull/957 Reviewed-By: Saúl Ibarra Corretgé --- Makefile.am | 1 + src/unix/os390.c | 42 ++++++++++++++++++++++++++++++++++++++++++ uv.gyp | 1 + 3 files changed, 44 insertions(+) create mode 100644 src/unix/os390.c diff --git a/Makefile.am b/Makefile.am index 8d5e68b5..adda2218 100644 --- a/Makefile.am +++ b/Makefile.am @@ -392,6 +392,7 @@ libuv_la_CFLAGS += -D_UNIX03_THREADS \ libuv_la_LDFLAGS += -qXPLINK libuv_la_SOURCES += src/unix/pthread-fixes.c \ src/unix/pthread-barrier.c +libuv_la_SOURCES += src/unix/os390.c endif if HAVE_PKG_CONFIG diff --git a/src/unix/os390.c b/src/unix/os390.c new file mode 100644 index 00000000..bcdbc4b6 --- /dev/null +++ b/src/unix/os390.c @@ -0,0 +1,42 @@ +/* Copyright libuv project 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 "internal.h" + +int uv__io_check_fd(uv_loop_t* loop, int fd) { + struct pollfd p[1]; + int rv; + + p[0].fd = fd; + p[0].events = POLLIN; + + do + rv = poll(p, 1, 0); + while (rv == -1 && errno == EINTR); + + if (rv == -1) + abort(); + + if (p[0].revents & POLLNVAL) + return -1; + + return 0; +} diff --git a/uv.gyp b/uv.gyp index a2edc9ec..4d1a0346 100644 --- a/uv.gyp +++ b/uv.gyp @@ -306,6 +306,7 @@ 'sources': [ 'src/unix/pthread-fixes.c', 'src/unix/pthread-barrier.c' + 'src/unix/os390.c' ] }], ]