diff options
Diffstat (limited to 'data/vim/patches/8.1.0890')
-rw-r--r-- | data/vim/patches/8.1.0890 | 219 |
1 files changed, 219 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0890 b/data/vim/patches/8.1.0890 new file mode 100644 index 000000000..451785125 --- /dev/null +++ b/data/vim/patches/8.1.0890 @@ -0,0 +1,219 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0890 +Fcc: outbox +From: Bram Moolenaar <Bram@moolenaar.net> +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 8.1.0890 +Problem: Pty allocation wrong if using file for out channel and using null + for in channel and null for error channel. +Solution: Correct using use_file_for_out in condition. (Ozaki Kiichi, closes + #3917) +Files: src/os_unix.c, src/testdir/test_channel.vim + + +*** ../vim-8.1.0889/src/os_unix.c 2019-01-31 15:52:05.265907656 +0100 +--- src/os_unix.c 2019-02-10 22:36:01.194231354 +0100 +*************** +*** 4196,4208 **** + /* + * Open a PTY, with FD for the master and slave side. + * When failing "pty_master_fd" and "pty_slave_fd" are -1. +! * When successful both file descriptors are stored. + */ + static void +! open_pty(int *pty_master_fd, int *pty_slave_fd, char_u **namep) + { + char *tty_name; + + *pty_master_fd = mch_openpty(&tty_name); // open pty + if (*pty_master_fd >= 0) + { +--- 4196,4214 ---- + /* + * Open a PTY, with FD for the master and slave side. + * When failing "pty_master_fd" and "pty_slave_fd" are -1. +! * When successful both file descriptors are stored and the allocated pty name +! * is stored in both "*name1" and "*name2". + */ + static void +! open_pty(int *pty_master_fd, int *pty_slave_fd, char_u **name1, char_u **name2) + { + char *tty_name; + ++ if (name1 != NULL) ++ *name1 = NULL; ++ if (name2 != NULL) ++ *name2 = NULL; ++ + *pty_master_fd = mch_openpty(&tty_name); // open pty + if (*pty_master_fd >= 0) + { +*************** +*** 4219,4226 **** + close(*pty_master_fd); + *pty_master_fd = -1; + } +! else if (namep != NULL) +! *namep = vim_strsave((char_u *)tty_name); + } + } + #endif +--- 4225,4237 ---- + close(*pty_master_fd); + *pty_master_fd = -1; + } +! else +! { +! if (name1 != NULL) +! *name1 = vim_strsave((char_u *)tty_name); +! if (name2 != NULL) +! *name2 = vim_strsave((char_u *)tty_name); +! } + } + } + #endif +*************** +*** 4513,4519 **** + * If the slave can't be opened, close the master pty. + */ + if (p_guipty && !(options & (SHELL_READ|SHELL_WRITE))) +! open_pty(&pty_master_fd, &pty_slave_fd, NULL); + /* + * If not opening a pty or it didn't work, try using pipes. + */ +--- 4524,4530 ---- + * If the slave can't be opened, close the master pty. + */ + if (p_guipty && !(options & (SHELL_READ|SHELL_WRITE))) +! open_pty(&pty_master_fd, &pty_slave_fd, NULL, NULL); + /* + * If not opening a pty or it didn't work, try using pipes. + */ +*************** +*** 5352,5364 **** + + if (options->jo_pty + && (!(use_file_for_in || use_null_for_in) +! || !(use_file_for_in || use_null_for_out) + || !(use_out_for_err || use_file_for_err || use_null_for_err))) +! { +! open_pty(&pty_master_fd, &pty_slave_fd, &job->jv_tty_out); +! if (job->jv_tty_out != NULL) +! job->jv_tty_in = vim_strsave(job->jv_tty_out); +! } + + /* TODO: without the channel feature connect the child to /dev/null? */ + /* Open pipes for stdin, stdout, stderr. */ +--- 5363,5372 ---- + + if (options->jo_pty + && (!(use_file_for_in || use_null_for_in) +! || !(use_file_for_out || use_null_for_out) + || !(use_out_for_err || use_file_for_err || use_null_for_err))) +! open_pty(&pty_master_fd, &pty_slave_fd, +! &job->jv_tty_out, &job->jv_tty_in); + + /* TODO: without the channel feature connect the child to /dev/null? */ + /* Open pipes for stdin, stdout, stderr. */ +*************** +*** 5834,5842 **** + int pty_slave_fd = -1; + channel_T *channel; + +! open_pty(&pty_master_fd, &pty_slave_fd, &job->jv_tty_out); +! if (job->jv_tty_out != NULL) +! job->jv_tty_in = vim_strsave(job->jv_tty_out); + close(pty_slave_fd); + + channel = add_channel(); +--- 5842,5848 ---- + int pty_slave_fd = -1; + channel_T *channel; + +! open_pty(&pty_master_fd, &pty_slave_fd, &job->jv_tty_out, &job->jv_tty_in); + close(pty_slave_fd); + + channel = add_channel(); +*** ../vim-8.1.0889/src/testdir/test_channel.vim 2019-02-10 22:23:23.020415140 +0100 +--- src/testdir/test_channel.vim 2019-02-10 22:39:24.104680140 +0100 +*************** +*** 2040,2042 **** +--- 2040,2094 ---- + call assert_equal(-1, info.exitval) + call assert_equal("term", info.termsig) + endfunc ++ ++ func Test_job_tty_in_out() ++ if !has('job') || !has('unix') ++ return ++ endif ++ ++ call writefile(['test'], 'Xtestin') ++ let in_opts = [{}, ++ \ {'in_io': 'null'}, ++ \ {'in_io': 'file', 'in_name': 'Xtestin'}] ++ let out_opts = [{}, ++ \ {'out_io': 'null'}, ++ \ {'out_io': 'file', 'out_name': 'Xtestout'}] ++ let err_opts = [{}, ++ \ {'err_io': 'null'}, ++ \ {'err_io': 'file', 'err_name': 'Xtesterr'}, ++ \ {'err_io': 'out'}] ++ let opts = [] ++ ++ for in_opt in in_opts ++ let x = copy(in_opt) ++ for out_opt in out_opts ++ call extend(x, out_opt) ++ for err_opt in err_opts ++ call extend(x, err_opt) ++ let opts += [extend({'pty': 1}, x)] ++ endfor ++ endfor ++ endfor ++ ++ for opt in opts ++ let job = job_start('echo', opt) ++ let info = job_info(job) ++ let msg = printf('option={"in_io": "%s", "out_io": "%s", "err_io": "%s"}', ++ \ get(opt, 'in_io', 'tty'), ++ \ get(opt, 'out_io', 'tty'), ++ \ get(opt, 'err_io', 'tty')) ++ ++ if !has_key(opt, 'in_io') || !has_key(opt, 'out_io') || !has_key(opt, 'err_io') ++ call assert_notequal('', info.tty_in, msg) ++ else ++ call assert_equal('', info.tty_in, msg) ++ endif ++ call assert_equal(info.tty_in, info.tty_out, msg) ++ ++ call WaitForAssert({-> assert_equal('dead', job_status(job))}) ++ endfor ++ ++ call delete('Xtestin') ++ call delete('Xtestout') ++ call delete('Xtesterr') ++ endfunc +*** ../vim-8.1.0889/src/version.c 2019-02-10 22:23:23.020415140 +0100 +--- src/version.c 2019-02-10 22:42:46.495151907 +0100 +*************** +*** 785,786 **** +--- 785,788 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 890, + /**/ + +-- +"I love deadlines. I especially like the whooshing sound they +make as they go flying by." + -- Douglas Adams + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ an exciting new programming language -- http://www.Zimbu.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |