diff options
author | Bram Moolenaar <Bram@vim.org> | 2019-04-28 14:59:59 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2019-04-28 14:59:59 +0200 |
commit | 1e44968780bb6ddb48bf22dc629a579c4035d5b3 (patch) | |
tree | af7b16ca55d8bf2dac6e38d14661d9e2f0ad33f6 /src | |
parent | f720d0a77e393990b2171a77210565bdc82064f2 (diff) |
patch 8.1.1225: cannot create a pty to use with :terminal on FreeBSDv8.1.1225
Problem: Cannot create a pty to use with :terminal on FreeBSD.
Solution: Add support for posix_openpt(). (Ozaki Kiichi, closes #4306,
closes #4289)
Diffstat (limited to 'src')
-rwxr-xr-x | src/auto/configure | 2 | ||||
-rw-r--r-- | src/config.h.in | 1 | ||||
-rw-r--r-- | src/configure.ac | 2 | ||||
-rw-r--r-- | src/pty.c | 39 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 41 insertions, 5 deletions
diff --git a/src/auto/configure b/src/auto/configure index c273857919..19982730db 100755 --- a/src/auto/configure +++ b/src/auto/configure @@ -12658,7 +12658,7 @@ for ac_func in fchdir fchown fchmod fsync getcwd getpseudotty \ getpgid setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \ sigprocmask sigvec strcasecmp strerror strftime stricmp strncasecmp \ strnicmp strpbrk strtol tgetent towlower towupper iswupper \ - usleep utime utimes mblen ftruncate unsetenv + usleep utime utimes mblen ftruncate unsetenv posix_openpt do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" diff --git a/src/config.h.in b/src/config.h.in index 7fe65de570..3f122fddb2 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -180,6 +180,7 @@ #undef HAVE_NANOSLEEP #undef HAVE_NL_LANGINFO_CODESET #undef HAVE_OPENDIR +#undef HAVE_POSIX_OPENPT #undef HAVE_PUTENV #undef HAVE_QSORT #undef HAVE_READLINK diff --git a/src/configure.ac b/src/configure.ac index be869d1d52..2a3bc33b40 100644 --- a/src/configure.ac +++ b/src/configure.ac @@ -3746,7 +3746,7 @@ AC_CHECK_FUNCS(fchdir fchown fchmod fsync getcwd getpseudotty \ getpgid setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \ sigprocmask sigvec strcasecmp strerror strftime stricmp strncasecmp \ strnicmp strpbrk strtol tgetent towlower towupper iswupper \ - usleep utime utimes mblen ftruncate unsetenv) + usleep utime utimes mblen ftruncate unsetenv posix_openpt) AC_FUNC_SELECT_ARGTYPES AC_FUNC_FSEEKO @@ -136,6 +136,13 @@ # define O_NOCTTY 0 #endif +#if defined(HAVE_SVR4_PTYS) || defined(HAVE_POSIX_OPENPT) +// These should be in stdlib.h, but it depends on _XOPEN_SOURCE. +char *ptsname(int); +int unlockpt(int); +int grantpt(int); +#endif + static void initmaster(int f UNUSED) { @@ -178,6 +185,35 @@ setup_slavepty(int fd) return 0; } +#if defined(HAVE_POSIX_OPENPT) && !defined(PTY_DONE) +#define PTY_DONE + int +mch_openpty(char **ttyn) +{ + int f; + char *m; + RETSIGTYPE (*sigcld) SIGPROTOARG; + static char TtyName[32]; // used for opening a new pty-pair + + if ((f = posix_openpt(O_RDWR | O_NOCTTY | O_EXTRA)) == -1) + return -1; + + // SIGCHLD set to SIG_DFL for grantpt() because it fork()s and + // exec()s pt_chmod + sigcld = signal(SIGCHLD, SIG_DFL); + if ((m = ptsname(f)) == NULL || grantpt(f) || unlockpt(f)) + { + signal(SIGCHLD, sigcld); + close(f); + return -1; + } + signal(SIGCHLD, sigcld); + vim_strncpy((char_u *)TtyName, (char_u *)m, sizeof(TtyName) - 1); + initmaster(f); + *ttyn = TtyName; + return f; +} +#endif #if defined(OSX) && !defined(PTY_DONE) #define PTY_DONE @@ -280,9 +316,6 @@ mch_openpty(char **ttyn) { int f; char *m; - char *(ptsname(int)); - int unlockpt(int); - int grantpt(int); RETSIGTYPE (*sigcld) SIGPROTOARG; /* used for opening a new pty-pair: */ static char TtyName[32]; diff --git a/src/version.c b/src/version.c index ae93dc3a4c..7c42d182e7 100644 --- a/src/version.c +++ b/src/version.c @@ -768,6 +768,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1225, +/**/ 1224, /**/ 1223, |