aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/main.c
diff options
context:
space:
mode:
authorb-r-o-c-k <brockmammen@gmail.com>2018-04-14 14:21:36 -0500
committerb-r-o-c-k <brockmammen@gmail.com>2018-04-14 14:21:36 -0500
commit387fbcd95cade4b0c037d18f404944676a59db09 (patch)
treef27c6fecbd40b2edd400ae612c77a30883c30512 /src/nvim/main.c
parentad999eaa775d7d4b0cacedb30c6ea3a0ee699a6f (diff)
downloadrneovim-387fbcd95cade4b0c037d18f404944676a59db09.tar.gz
rneovim-387fbcd95cade4b0c037d18f404944676a59db09.tar.bz2
rneovim-387fbcd95cade4b0c037d18f404944676a59db09.zip
win: Fix reading from stdin
* Reading from stdin on Windows is fixed in the same way as it was in #8267. * The file_read function was returning without filling the destination buffer when it was called with a non-blocking file descriptor.
Diffstat (limited to 'src/nvim/main.c')
-rw-r--r--src/nvim/main.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/nvim/main.c b/src/nvim/main.c
index 067184c8c7..4f9a5a979f 100644
--- a/src/nvim/main.c
+++ b/src/nvim/main.c
@@ -1096,6 +1096,17 @@ scripterror:
int error;
if (STRCMP(argv[0], "-") == 0) {
const int stdin_dup_fd = os_dup(STDIN_FILENO);
+#ifdef WIN32
+ // On Windows, replace the original stdin with the
+ // console input handle.
+ close(STDIN_FILENO);
+ const HANDLE conin_handle =
+ CreateFile("CONIN$", GENERIC_READ | GENERIC_WRITE,
+ FILE_SHARE_READ, (LPSECURITY_ATTRIBUTES)NULL,
+ OPEN_EXISTING, 0, (HANDLE)NULL);
+ const int conin_fd = _open_osfhandle(conin_handle, _O_RDONLY);
+ assert(conin_fd == STDIN_FILENO);
+#endif
FileDescriptor *const stdin_dup = file_open_fd_new(
&error, stdin_dup_fd, kFileReadOnly|kFileNonBlocking);
assert(stdin_dup != NULL);