diff options
author | b-r-o-c-k <brockmammen@gmail.com> | 2018-04-14 14:21:36 -0500 |
---|---|---|
committer | b-r-o-c-k <brockmammen@gmail.com> | 2018-04-14 14:21:36 -0500 |
commit | 387fbcd95cade4b0c037d18f404944676a59db09 (patch) | |
tree | f27c6fecbd40b2edd400ae612c77a30883c30512 /src/nvim/main.c | |
parent | ad999eaa775d7d4b0cacedb30c6ea3a0ee699a6f (diff) | |
download | rneovim-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.c | 11 |
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); |