diff options
author | Daiki Ueno <ueno@gnu.org> | 2014-11-18 21:11:09 +0900 |
---|---|---|
committer | Daiki Ueno <ueno@gnu.org> | 2014-11-22 17:06:18 +0900 |
commit | 624ea2886cc570788cb01c4fd59315de301b0cd6 (patch) | |
tree | ed6edf0e27be6b9cb8a725e2b7e5adbcb869d46c /lib/pipe-filter-gi.c | |
parent | 6dd16adf3feba066fba6d32a5cadc2c949967072 (diff) | |
download | gnulib-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.c | 16 |
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) { |