summaryrefslogtreecommitdiff
path: root/lib/pipe-filter-gi.c
diff options
context:
space:
mode:
authorDaiki Ueno <ueno@gnu.org>2014-11-18 21:11:09 +0900
committerDaiki Ueno <ueno@gnu.org>2014-11-22 17:06:18 +0900
commit624ea2886cc570788cb01c4fd59315de301b0cd6 (patch)
treeed6edf0e27be6b9cb8a725e2b7e5adbcb869d46c /lib/pipe-filter-gi.c
parent6dd16adf3feba066fba6d32a5cadc2c949967072 (diff)
downloadgnulib-624ea2886cc570788cb01c4fd59315de301b0cd6.tar.gz
pipe-filter-gi, pipe-filter-ii: port to AIX
On AIX 7.1, 'select' is defined as static and cannot be referred to from inline function. * lib/pipe-filter-aux.h (nointr_select): Remove, manually expand the definition... * lib/pipe-filter-gi.c (filter_loop): ...here, and... * lib/pipe-filter-ii.c (pipe_filter_ii_execute): ...here.
Diffstat (limited to 'lib/pipe-filter-gi.c')
-rw-r--r--lib/pipe-filter-gi.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/lib/pipe-filter-gi.c b/lib/pipe-filter-gi.c
index de7b257f16..a1d1883772 100644
--- a/lib/pipe-filter-gi.c
+++ b/lib/pipe-filter-gi.c
@@ -302,7 +302,7 @@ filter_loop (struct pipe_filter_gi *filter, const char *wbuf, size_t count)
/* Here, if done_writing, filter->reader_terminated is false. When
filter->reader_terminated becomes true, this loop is terminated. */
# if HAVE_SELECT
- int n;
+ int n, retval;
/* See whether reading or writing is possible. */
n = 1;
@@ -317,10 +317,16 @@ filter_loop (struct pipe_filter_gi *filter, const char *wbuf, size_t count)
if (n <= filter->fd[1])
n = filter->fd[1] + 1;
}
- n = select (n,
- (!filter->reader_terminated ? &filter->readfds : NULL),
- (!done_writing ? &filter->writefds : NULL),
- NULL, NULL);
+ /* Do EINTR handling here instead of in pipe-filter-aux.h,
+ because select() cannot be referred to from an inline
+ function on AIX 7.1. */
+ do
+ retval = select (n,
+ (!filter->reader_terminated ? &filter->readfds : NULL),
+ (!done_writing ? &filter->writefds : NULL),
+ NULL, NULL);
+ while (retval < 0 && errno == EINTR);
+ n = retval;
if (n < 0)
{