diff --git a/src/win/internal.h b/src/win/internal.h index c89daa58..04b2a548 100644 --- a/src/win/internal.h +++ b/src/win/internal.h @@ -213,6 +213,8 @@ int uv_tty_read_start(uv_tty_t* handle, uv_alloc_cb alloc_cb, int uv_tty_read_stop(uv_tty_t* handle); int uv_tty_write(uv_loop_t* loop, uv_write_t* req, uv_tty_t* handle, const uv_buf_t bufs[], unsigned int nbufs, uv_write_cb cb); +int uv__tty_try_write(uv_tty_t* handle, const uv_buf_t bufs[], + unsigned int nbufs); void uv_tty_close(uv_tty_t* handle); void uv_process_tty_read_req(uv_loop_t* loop, uv_tty_t* handle, diff --git a/src/win/stream.c b/src/win/stream.c index 58773f00..36d88d00 100644 --- a/src/win/stream.c +++ b/src/win/stream.c @@ -193,6 +193,7 @@ int uv_try_write(uv_stream_t* stream, case UV_TCP: return uv__tcp_try_write((uv_tcp_t*) stream, bufs, nbufs); case UV_TTY: + return uv__tty_try_write((uv_tty_t*) stream, bufs, nbufs); case UV_NAMED_PIPE: return UV_EAGAIN; default: diff --git a/src/win/tty.c b/src/win/tty.c index be4a8b81..60342104 100644 --- a/src/win/tty.c +++ b/src/win/tty.c @@ -1878,6 +1878,21 @@ int uv_tty_write(uv_loop_t* loop, } +int uv__tty_try_write(uv_tty_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs) { + DWORD error; + + if (handle->write_reqs_pending > 0) + return UV_EAGAIN; + + if (uv_tty_write_bufs(handle, bufs, nbufs, &error)) + return uv_translate_sys_error(error); + + return uv__count_bufs(bufs, nbufs); +} + + void uv_process_tty_write_req(uv_loop_t* loop, uv_tty_t* handle, uv_write_t* req) { int err;