0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 8.1.1225: cannot create a pty to use with :terminal on FreeBSD

Problem:    Cannot create a pty to use with :terminal on FreeBSD.
Solution:   Add support for posix_openpt(). (Ozaki Kiichi, closes #4306,
            closes #4289)
This commit is contained in:
Bram Moolenaar 2019-04-28 14:59:59 +02:00
parent f720d0a77e
commit 1e44968780
5 changed files with 41 additions and 5 deletions

2
src/auto/configure vendored
View File

@ -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"

View File

@ -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

View File

@ -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

View File

@ -134,6 +134,13 @@
*/
#ifndef O_NOCTTY
# 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
@ -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];

View File

@ -767,6 +767,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1225,
/**/
1224,
/**/