diff options
| -rw-r--r-- | src/nvim/os/pty_process_win.c | 13 | 
1 files changed, 9 insertions, 4 deletions
| diff --git a/src/nvim/os/pty_process_win.c b/src/nvim/os/pty_process_win.c index 4bb5f64455..ef8a699c56 100644 --- a/src/nvim/os/pty_process_win.c +++ b/src/nvim/os/pty_process_win.c @@ -97,7 +97,8 @@ int pty_process_spawn(PtyProcess *ptyproc)      }    } -  status = build_cmd_line(proc->argv, &cmd_line); +  status = build_cmd_line(proc->argv, &cmd_line, +                          os_shell_is_cmdexe(proc->argv[0]));    if (status != 0) {      emsg = "Failed to convert cmd line form utf8 to utf16.";      goto cleanup; @@ -258,7 +259,7 @@ static void pty_process_finish2(PtyProcess *ptyproc)  ///  /// @returns zero on success, or error code of MultiByteToWideChar function.  /// -static int build_cmd_line(char **argv, wchar_t **cmd_line) +static int build_cmd_line(char **argv, wchar_t **cmd_line, bool is_cmdexe)    FUNC_ATTR_NONNULL_ALL  {    size_t utf8_cmd_line_len = 0; @@ -267,10 +268,14 @@ static int build_cmd_line(char **argv, wchar_t **cmd_line)    QUEUE_INIT(&args_q);    while (*argv) { -    size_t buf_len = strlen(*argv) * 2 + 3; +    size_t buf_len = is_cmdexe ? (strlen(*argv) + 1) : (strlen(*argv) * 2 + 3);      ArgNode *arg_node = xmalloc(sizeof(*arg_node));      arg_node->arg = xmalloc(buf_len); -    quote_cmd_arg(arg_node->arg, buf_len, *argv); +    if (is_cmdexe) { +      xstrlcpy(arg_node->arg, *argv, buf_len); +    } else { +      quote_cmd_arg(arg_node->arg, buf_len, *argv); +    }      utf8_cmd_line_len += strlen(arg_node->arg);      QUEUE_INIT(&arg_node->node);      QUEUE_INSERT_TAIL(&args_q, &arg_node->node); | 
