diff options
Diffstat (limited to 'data/vim/patches/8.1.0824')
-rw-r--r-- | data/vim/patches/8.1.0824 | 676 |
1 files changed, 676 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0824 b/data/vim/patches/8.1.0824 new file mode 100644 index 000000000..e38e26d0d --- /dev/null +++ b/data/vim/patches/8.1.0824 @@ -0,0 +1,676 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0824 +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.0824 +Problem: SunOS/Solaris has a problem with ttys. +Solution: Add mch_isatty() with extra handling for SunOS. (Ozaki Kiichi, + closes #3865) +Files: src/auto/configure, src/channel.c, src/config.h.in, + src/configure.ac, src/os_unix.c, src/proto/pty.pro, src/pty.c, + src/terminal.c + + +*** ../vim-8.1.0823/src/auto/configure 2019-01-24 17:59:35.135217476 +0100 +--- src/auto/configure 2019-01-26 14:57:08.963571107 +0100 +*************** +*** 11131,11137 **** + unistd.h stropts.h errno.h sys/resource.h \ + sys/systeminfo.h locale.h sys/stream.h termios.h \ + libc.h sys/statfs.h poll.h sys/poll.h pwd.h \ +! utime.h sys/param.h libintl.h libgen.h \ + util/debug.h util/msg18n.h frame.h sys/acl.h \ + sys/access.h sys/sysinfo.h wchar.h wctype.h + do : +--- 11131,11137 ---- + unistd.h stropts.h errno.h sys/resource.h \ + sys/systeminfo.h locale.h sys/stream.h termios.h \ + libc.h sys/statfs.h poll.h sys/poll.h pwd.h \ +! utime.h sys/param.h sys/ptms.h libintl.h libgen.h \ + util/debug.h util/msg18n.h frame.h sys/acl.h \ + sys/access.h sys/sysinfo.h wchar.h wctype.h + do : +*** ../vim-8.1.0823/src/channel.c 2019-01-24 23:11:44.631650199 +0100 +--- src/channel.c 2019-01-26 14:56:30.315399239 +0100 +*************** +*** 1048,1054 **** + # if defined(UNIX) + /* Do not end the job when all output channels are closed, wait until + * the job ended. */ +! if (isatty(in)) + channel->ch_to_be_closed |= (1U << PART_IN); + # endif + } +--- 1048,1054 ---- + # if defined(UNIX) + /* Do not end the job when all output channels are closed, wait until + * the job ended. */ +! if (mch_isatty(in)) + channel->ch_to_be_closed |= (1U << PART_IN); + # endif + } +*** ../vim-8.1.0823/src/config.h.in 2019-01-24 17:59:35.135217476 +0100 +--- src/config.h.in 2019-01-26 14:56:30.315399239 +0100 +*************** +*** 258,263 **** +--- 258,264 ---- + #undef HAVE_SYS_PARAM_H + #undef HAVE_SYS_POLL_H + #undef HAVE_SYS_PTEM_H ++ #undef HAVE_SYS_PTMS_H + #undef HAVE_SYS_RESOURCE_H + #undef HAVE_SYS_SELECT_H + #undef HAVE_SYS_STATFS_H +*** ../vim-8.1.0823/src/configure.ac 2019-01-24 17:59:35.135217476 +0100 +--- src/configure.ac 2019-01-26 14:56:30.315399239 +0100 +*************** +*** 3265,3271 **** + unistd.h stropts.h errno.h sys/resource.h \ + sys/systeminfo.h locale.h sys/stream.h termios.h \ + libc.h sys/statfs.h poll.h sys/poll.h pwd.h \ +! utime.h sys/param.h libintl.h libgen.h \ + util/debug.h util/msg18n.h frame.h sys/acl.h \ + sys/access.h sys/sysinfo.h wchar.h wctype.h) + +--- 3265,3271 ---- + unistd.h stropts.h errno.h sys/resource.h \ + sys/systeminfo.h locale.h sys/stream.h termios.h \ + libc.h sys/statfs.h poll.h sys/poll.h pwd.h \ +! utime.h sys/param.h sys/ptms.h libintl.h libgen.h \ + util/debug.h util/msg18n.h frame.h sys/acl.h \ + sys/access.h sys/sysinfo.h wchar.h wctype.h) + +*** ../vim-8.1.0823/src/os_unix.c 2019-01-24 16:38:58.272712472 +0100 +--- src/os_unix.c 2019-01-26 15:02:45.792035406 +0100 +*************** +*** 338,344 **** + } + + /* Why is NeXT excluded here (and not in os_unixx.h)? */ +! #if defined(ECHOE) && defined(ICANON) && (defined(HAVE_TERMIO_H) || defined(HAVE_TERMIOS_H)) && !defined(__NeXT__) + # define NEW_TTY_SYSTEM + #endif + +--- 338,346 ---- + } + + /* Why is NeXT excluded here (and not in os_unixx.h)? */ +! #if defined(ECHOE) && defined(ICANON) \ +! && (defined(HAVE_TERMIO_H) || defined(HAVE_TERMIOS_H)) \ +! && !defined(__NeXT__) + # define NEW_TTY_SYSTEM + #endif + +*************** +*** 3448,3453 **** +--- 3450,3507 ---- + + #ifndef VMS + ++ /* ++ * Get the file descriptor to use for tty operations. ++ */ ++ static int ++ get_tty_fd(int fd) ++ { ++ int tty_fd = fd; ++ ++ #if defined(HAVE_SVR4_PTYS) && defined(SUN_SYSTEM) ++ // On SunOS: Get the terminal parameters from "fd", or the slave device of ++ // "fd" when it is a master device. ++ if (mch_isatty(fd) > 1) ++ { ++ char *name; ++ ++ name = ptsname(fd); ++ if (name == NULL) ++ return -1; ++ ++ tty_fd = open(name, O_RDONLY | O_NOCTTY | O_EXTRA, 0); ++ if (tty_fd < 0) ++ return -1; ++ } ++ #endif ++ return tty_fd; ++ } ++ ++ static int ++ mch_tcgetattr(int fd, void *term) ++ { ++ int tty_fd; ++ int retval = -1; ++ ++ tty_fd = get_tty_fd(fd); ++ if (tty_fd >= 0) ++ { ++ #ifdef NEW_TTY_SYSTEM ++ # ifdef HAVE_TERMIOS_H ++ retval = tcgetattr(tty_fd, (struct termios *)term); ++ # else ++ retval = ioctl(tty_fd, TCGETA, (struct termio *)term); ++ # endif ++ #else ++ // for "old" tty systems ++ retval = ioctl(tty_fd, TIOCGETP, (struct sgttyb *)term); ++ #endif ++ if (tty_fd != fd) ++ close(tty_fd); ++ } ++ return retval; ++ } ++ + void + mch_settmode(int tmode) + { +*************** +*** 3465,3475 **** + if (first) + { + first = FALSE; +! # if defined(HAVE_TERMIOS_H) +! tcgetattr(read_cmd_fd, &told); +! # else +! ioctl(read_cmd_fd, TCGETA, &told); +! # endif + } + + tnew = told; +--- 3519,3525 ---- + if (first) + { + first = FALSE; +! mch_tcgetattr(read_cmd_fd, &told); + } + + tnew = told; +*************** +*** 3527,3533 **** + if (first) + { + first = FALSE; +! ioctl(read_cmd_fd, TIOCGETP, &ttybold); + } + + ttybnew = ttybold; +--- 3577,3583 ---- + if (first) + { + first = FALSE; +! mch_tcgetattr(read_cmd_fd, &ttybold); + } + + ttybnew = ttybold; +*************** +*** 3587,3599 **** + struct termio keys; + # endif + +! if ( +! # if defined(HAVE_TERMIOS_H) +! tcgetattr(fd, &keys) != -1 +! # else +! ioctl(fd, TCGETA, &keys) != -1 +! # endif +! ) + { + info->backspace = keys.c_cc[VERASE]; + info->interrupt = keys.c_cc[VINTR]; +--- 3637,3643 ---- + struct termio keys; + # endif + +! if (mch_tcgetattr(fd, &keys) != -1) + { + info->backspace = keys.c_cc[VERASE]; + info->interrupt = keys.c_cc[VINTR]; +*************** +*** 3611,3617 **** + /* for "old" tty systems */ + struct sgttyb keys; + +! if (ioctl(fd, TIOCGETP, &keys) != -1) + { + info->backspace = keys.sg_erase; + info->interrupt = keys.sg_kill; +--- 3655,3661 ---- + /* for "old" tty systems */ + struct sgttyb keys; + +! if (mch_tcgetattr(fd, &keys) != -1) + { + info->backspace = keys.sg_erase; + info->interrupt = keys.sg_kill; +*************** +*** 4070,4103 **** + int + mch_report_winsize(int fd, int rows, int cols) + { +! # ifdef TIOCSWINSZ +! struct winsize ws; + +! ws.ws_col = cols; +! ws.ws_row = rows; +! ws.ws_xpixel = cols * 5; +! ws.ws_ypixel = rows * 10; +! if (ioctl(fd, TIOCSWINSZ, &ws) == 0) + { +! ch_log(NULL, "ioctl(TIOCSWINSZ) success"); +! return OK; +! } +! ch_log(NULL, "ioctl(TIOCSWINSZ) failed"); +! # else +! # ifdef TIOCSSIZE +! struct ttysize ts; + +! ts.ts_cols = cols; +! ts.ts_lines = rows; +! if (ioctl(fd, TIOCSSIZE, &ws) == 0) +! { +! ch_log(NULL, "ioctl(TIOCSSIZE) success"); +! return OK; +! } +! ch_log(NULL, "ioctl(TIOCSSIZE) failed"); +! # endif + # endif +! return FAIL; + } + #endif + +--- 4114,4148 ---- + int + mch_report_winsize(int fd, int rows, int cols) + { +! int tty_fd; +! int retval = -1; + +! tty_fd = get_tty_fd(fd); +! if (tty_fd >= 0) + { +! # if defined(TIOCSWINSZ) +! struct winsize ws; + +! ws.ws_col = cols; +! ws.ws_row = rows; +! ws.ws_xpixel = cols * 5; +! ws.ws_ypixel = rows * 10; +! retval = ioctl(tty_fd, TIOCSWINSZ, &ws); +! ch_log(NULL, "ioctl(TIOCSWINSZ) %s", +! retval == 0 ? "success" : "failed"); +! # elif defined(TIOCSSIZE) +! struct ttysize ts; +! +! ts.ts_cols = cols; +! ts.ts_lines = rows; +! retval = ioctl(tty_fd, TIOCSSIZE, &ts); +! ch_log(NULL, "ioctl(TIOCSSIZE) %s", +! retval == 0 ? "success" : "failed"); + # endif +! if (tty_fd != fd) +! close(tty_fd); +! } +! return retval == 0 ? OK : FAIL; + } + #endif + +*************** +*** 4273,4279 **** + { + char *tty_name; + +! *pty_master_fd = OpenPTY(&tty_name); /* open pty */ + if (*pty_master_fd >= 0) + { + /* Leaving out O_NOCTTY may lead to waitpid() always returning +--- 4318,4324 ---- + { + char *tty_name; + +! *pty_master_fd = mch_openpty(&tty_name); // open pty + if (*pty_master_fd >= 0) + { + /* Leaving out O_NOCTTY may lead to waitpid() always returning +*************** +*** 4721,4727 **** + { + /* push stream discipline modules */ + if (options & SHELL_COOKED) +! SetupSlavePTY(pty_slave_fd); + # ifdef TIOCSCTTY + /* Try to become controlling tty (probably doesn't work, + * unless run by root) */ +--- 4766,4772 ---- + { + /* push stream discipline modules */ + if (options & SHELL_COOKED) +! setup_slavepty(pty_slave_fd); + # ifdef TIOCSCTTY + /* Try to become controlling tty (probably doesn't work, + * unless run by root) */ +*************** +*** 5579,5585 **** + if (pty_slave_fd >= 0) + { + /* push stream discipline modules */ +! SetupSlavePTY(pty_slave_fd); + # ifdef TIOCSCTTY + /* Try to become controlling tty (probably doesn't work, + * unless run by root) */ +--- 5624,5630 ---- + if (pty_slave_fd >= 0) + { + /* push stream discipline modules */ +! setup_slavepty(pty_slave_fd); + # ifdef TIOCSCTTY + /* Try to become controlling tty (probably doesn't work, + * unless run by root) */ +*** ../vim-8.1.0823/src/proto/pty.pro 2018-05-17 13:52:49.000000000 +0200 +--- src/proto/pty.pro 2019-01-26 15:12:08.822449336 +0100 +*************** +*** 1,4 **** + /* pty.c */ +! int SetupSlavePTY(int fd); +! int OpenPTY(char **ttyn); + /* vim: set ft=c : */ +--- 1,5 ---- + /* pty.c */ +! int setup_slavepty(int fd); +! int mch_openpty(char **ttyn); +! int mch_isatty(int fd); + /* vim: set ft=c : */ +*** ../vim-8.1.0823/src/pty.c 2018-09-30 21:43:17.203693237 +0200 +--- src/pty.c 2019-01-26 15:05:23.639798802 +0100 +*************** +*** 56,71 **** + #endif + + #if HAVE_STROPTS_H +! #include <sys/types.h> +! #ifdef sinix +! #define buf_T __system_buf_t__ +! #endif +! #include <stropts.h> +! #ifdef sinix +! #undef buf_T +! #endif + # ifdef SUN_SYSTEM + # include <sys/conf.h> + # endif + #endif + +--- 56,74 ---- + #endif + + #if HAVE_STROPTS_H +! # include <sys/types.h> +! # ifdef sinix +! # define buf_T __system_buf_t__ +! # endif +! # include <stropts.h> +! # ifdef sinix +! # undef buf_T +! # endif + # ifdef SUN_SYSTEM + # include <sys/conf.h> ++ # if defined(HAVE_SYS_PTMS_H) && defined(HAVE_SVR4_PTYS) ++ # include <sys/ptms.h> ++ # endif + # endif + #endif + +*************** +*** 155,165 **** + * pty on others. Needs to be tuned... + */ + int +! SetupSlavePTY(int fd) + { + if (fd < 0) + return 0; +! #if defined(I_PUSH) && defined(HAVE_SVR4_PTYS) && !defined(sgi) && !defined(linux) && !defined(__osf__) && !defined(M_UNIX) + # if defined(HAVE_SYS_PTEM_H) || defined(hpux) + if (ioctl(fd, I_PUSH, "ptem") != 0) + return -1; +--- 158,169 ---- + * pty on others. Needs to be tuned... + */ + int +! setup_slavepty(int fd) + { + if (fd < 0) + return 0; +! #if defined(I_PUSH) && defined(HAVE_SVR4_PTYS) && !defined(sgi) \ +! && !defined(linux) && !defined(__osf__) && !defined(M_UNIX) + # if defined(HAVE_SYS_PTEM_H) || defined(hpux) + if (ioctl(fd, I_PUSH, "ptem") != 0) + return -1; +*************** +*** 178,184 **** + #if defined(OSX) && !defined(PTY_DONE) + #define PTY_DONE + int +! OpenPTY(char **ttyn) + { + int f; + static char TtyName[32]; +--- 182,188 ---- + #if defined(OSX) && !defined(PTY_DONE) + #define PTY_DONE + int +! mch_openpty(char **ttyn) + { + int f; + static char TtyName[32]; +*************** +*** 195,201 **** + && !defined(PTY_DONE) + #define PTY_DONE + int +! OpenPTY(char **ttyn) + { + char *m, *s; + int f; +--- 199,205 ---- + && !defined(PTY_DONE) + #define PTY_DONE + int +! mch_openpty(char **ttyn) + { + char *m, *s; + int f; +*************** +*** 219,225 **** + #if defined(__sgi) && !defined(PTY_DONE) + #define PTY_DONE + int +! OpenPTY(char **ttyn) + { + int f; + char *name; +--- 223,229 ---- + #if defined(__sgi) && !defined(PTY_DONE) + #define PTY_DONE + int +! mch_openpty(char **ttyn) + { + int f; + char *name; +*************** +*** 244,250 **** + #if defined(MIPS) && defined(HAVE_DEV_PTC) && !defined(PTY_DONE) + #define PTY_DONE + int +! OpenPTY(char **ttyn) + { + int f; + stat_T buf; +--- 248,254 ---- + #if defined(MIPS) && defined(HAVE_DEV_PTC) && !defined(PTY_DONE) + #define PTY_DONE + int +! mch_openpty(char **ttyn) + { + int f; + stat_T buf; +*************** +*** 272,278 **** + * Same for Mac OS X Leopard (10.5). */ + #define PTY_DONE + int +! OpenPTY(char **ttyn) + { + int f; + char *m; +--- 276,282 ---- + * Same for Mac OS X Leopard (10.5). */ + #define PTY_DONE + int +! mch_openpty(char **ttyn) + { + int f; + char *m; +*************** +*** 313,319 **** + #endif + + int +! OpenPTY(char **ttyn) + { + int f; + /* used for opening a new pty-pair: */ +--- 317,323 ---- + #endif + + int +! mch_openpty(char **ttyn) + { + int f; + /* used for opening a new pty-pair: */ +*************** +*** 359,365 **** + # endif + + int +! OpenPTY(char **ttyn) + { + char *p, *q, *l, *d; + int f; +--- 363,369 ---- + # endif + + int +! mch_openpty(char **ttyn) + { + char *p, *q, *l, *d; + int f; +*************** +*** 410,413 **** + } + #endif + +! #endif /* FEAT_GUI || FEAT_TERMINAL */ +--- 414,443 ---- + } + #endif + +! /* +! * Call isatty(fd), except for SunOS where it's done differently. +! */ +! int +! mch_isatty(int fd) +! { +! # if defined(I_STR) && defined(HAVE_SYS_PTMS_H) && defined(HAVE_SVR4_PTYS) \ +! && defined(SUN_SYSTEM) +! // On SunOS, isatty() for /dev/ptmx returns false or sometimes can hang up +! // in the inner ioctl(), and therefore first determine whether "fd" is a +! // master device. +! struct strioctl istr; +! +! istr.ic_cmd = ISPTM; +! istr.ic_timout = 0; +! istr.ic_dp = NULL; +! istr.ic_len = 0; +! +! if (ioctl(fd, I_STR, &istr) == 0) +! // Trick: return 2 in order to advice the caller that "fd" is a master +! // device. cf. src/os_unix.c:get_tty_fd() +! return 2; +! # endif +! return isatty(fd); +! } +! +! #endif /* FEAT_GUI || FEAT_JOB_CHANNEL */ +*** ../vim-8.1.0823/src/terminal.c 2019-01-20 15:30:36.897328669 +0100 +--- src/terminal.c 2019-01-26 14:56:30.319399259 +0100 +*************** +*** 873,879 **** + { + int fd = term->tl_job->jv_channel->ch_part[parts[i]].ch_fd; + +! if (isatty(fd)) + return parts[i]; + } + #endif +--- 873,879 ---- + { + int fd = term->tl_job->jv_channel->ch_part[parts[i]].ch_fd; + +! if (mch_isatty(fd)) + return parts[i]; + } + #endif +*************** +*** 2182,2188 **** + * them for every typed character is a bit of overhead, but it's needed + * for the first character typed, e.g. when Vim starts in a shell. + */ +! if (isatty(tty_fd)) + { + ttyinfo_T info; + +--- 2182,2188 ---- + * them for every typed character is a bit of overhead, but it's needed + * for the first character typed, e.g. when Vim starts in a shell. + */ +! if (mch_isatty(tty_fd)) + { + ttyinfo_T info; + +*************** +*** 5882,5888 **** + for (part = PART_OUT; part < PART_COUNT; ++part) + { + fd = term->tl_job->jv_channel->ch_part[part].ch_fd; +! if (isatty(fd)) + break; + } + if (part < PART_COUNT && mch_report_winsize(fd, rows, cols) == OK) +--- 5882,5888 ---- + for (part = PART_OUT; part < PART_COUNT; ++part) + { + fd = term->tl_job->jv_channel->ch_part[part].ch_fd; +! if (mch_isatty(fd)) + break; + } + if (part < PART_COUNT && mch_report_winsize(fd, rows, cols) == OK) +*** ../vim-8.1.0823/src/version.c 2019-01-26 14:11:15.083587014 +0100 +--- src/version.c 2019-01-26 15:11:16.690665449 +0100 +*************** +*** 789,790 **** +--- 789,792 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 824, + /**/ + +-- +Veni, Vidi, Video -- I came, I saw, I taped what I saw. + + /// 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 /// |