瀏覽代碼

passthrough EOF from Terminal to child, plus exit handling

Jan Klemkow 5 年之前
父節點
當前提交
a0cb60891a
共有 1 個文件被更改,包括 12 次插入2 次删除
  1. 12 2
      scroll.c

+ 12 - 2
scroll.c

@@ -477,8 +477,10 @@ main(int argc, char *argv[])
 		if (pfd[0].revents & POLLIN) {
 			ssize_t n = read(STDIN_FILENO, input, sizeof(input)-1);
 
-			if (n <= 0 && errno != EINTR)
+			if (n == -1 && errno != EINTR)
 				die("read:");
+			if (n == 0)
+				break;
 
 			input[n] = '\0';
 
@@ -538,5 +540,13 @@ main(int argc, char *argv[])
 		}
 	}
 
-	return EXIT_SUCCESS;
+	if (close(mfd) == -1)
+		die("close:");
+
+	int status;
+	while ((pid = waitpid(-1, &status, WNOHANG)) > 0)
+		if (pid != child)
+			continue;
+
+	return WEXITSTATUS(status);
 }