Browse Source

(feed_subshell): on IBM i, read(1) can return 0 for a non-closed fd.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
Jesse R. Gorzinski 6 years ago
parent
commit
4da6ea8db3
2 changed files with 10 additions and 0 deletions
  1. 5 0
      configure.ac
  2. 5 0
      src/subshell/common.c

+ 5 - 0
configure.ac

@@ -321,6 +321,11 @@ case $host_os in
     ;;
 esac
 
+case $host_os in
+*os400)
+    AC_DEFINE([PTY_ZEROREAD], [1], [read(1) can return 0 for a non-closed fd])
+esac
+
 dnl Check linux/fs.h for FICLONE to support BTRFS's file clone operation
 case $host_os in
 linux*)

+ 5 - 0
src/subshell/common.c

@@ -558,9 +558,14 @@ feed_subshell (int how, gboolean fail_on_error)
 
             if (bytes <= 0)
             {
+#ifdef PTY_ZEROREAD
+                /* On IBM i, read(1) can return 0 for a non-closed fd */
+                continue;
+#else
                 tcsetattr (STDOUT_FILENO, TCSANOW, &shell_mode);
                 fprintf (stderr, "read (subshell_pty...): %s\r\n", unix_error_string (errno));
                 exit (EXIT_FAILURE);
+#endif
             }
 
             if (how == VISIBLY)