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:
parent
f720d0a77e
commit
1e44968780
2
src/auto/configure
vendored
2
src/auto/configure
vendored
@ -12658,7 +12658,7 @@ for ac_func in fchdir fchown fchmod fsync getcwd getpseudotty \
|
|||||||
getpgid setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
|
getpgid setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
|
||||||
sigprocmask sigvec strcasecmp strerror strftime stricmp strncasecmp \
|
sigprocmask sigvec strcasecmp strerror strftime stricmp strncasecmp \
|
||||||
strnicmp strpbrk strtol tgetent towlower towupper iswupper \
|
strnicmp strpbrk strtol tgetent towlower towupper iswupper \
|
||||||
usleep utime utimes mblen ftruncate unsetenv
|
usleep utime utimes mblen ftruncate unsetenv posix_openpt
|
||||||
do :
|
do :
|
||||||
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
||||||
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
|
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
|
||||||
|
@ -180,6 +180,7 @@
|
|||||||
#undef HAVE_NANOSLEEP
|
#undef HAVE_NANOSLEEP
|
||||||
#undef HAVE_NL_LANGINFO_CODESET
|
#undef HAVE_NL_LANGINFO_CODESET
|
||||||
#undef HAVE_OPENDIR
|
#undef HAVE_OPENDIR
|
||||||
|
#undef HAVE_POSIX_OPENPT
|
||||||
#undef HAVE_PUTENV
|
#undef HAVE_PUTENV
|
||||||
#undef HAVE_QSORT
|
#undef HAVE_QSORT
|
||||||
#undef HAVE_READLINK
|
#undef HAVE_READLINK
|
||||||
|
@ -3746,7 +3746,7 @@ AC_CHECK_FUNCS(fchdir fchown fchmod fsync getcwd getpseudotty \
|
|||||||
getpgid setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
|
getpgid setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
|
||||||
sigprocmask sigvec strcasecmp strerror strftime stricmp strncasecmp \
|
sigprocmask sigvec strcasecmp strerror strftime stricmp strncasecmp \
|
||||||
strnicmp strpbrk strtol tgetent towlower towupper iswupper \
|
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_SELECT_ARGTYPES
|
||||||
AC_FUNC_FSEEKO
|
AC_FUNC_FSEEKO
|
||||||
|
|
||||||
|
39
src/pty.c
39
src/pty.c
@ -134,6 +134,13 @@
|
|||||||
*/
|
*/
|
||||||
#ifndef O_NOCTTY
|
#ifndef O_NOCTTY
|
||||||
# define O_NOCTTY 0
|
# 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
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -178,6 +185,35 @@ setup_slavepty(int fd)
|
|||||||
return 0;
|
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)
|
#if defined(OSX) && !defined(PTY_DONE)
|
||||||
#define PTY_DONE
|
#define PTY_DONE
|
||||||
@ -280,9 +316,6 @@ mch_openpty(char **ttyn)
|
|||||||
{
|
{
|
||||||
int f;
|
int f;
|
||||||
char *m;
|
char *m;
|
||||||
char *(ptsname(int));
|
|
||||||
int unlockpt(int);
|
|
||||||
int grantpt(int);
|
|
||||||
RETSIGTYPE (*sigcld) SIGPROTOARG;
|
RETSIGTYPE (*sigcld) SIGPROTOARG;
|
||||||
/* used for opening a new pty-pair: */
|
/* used for opening a new pty-pair: */
|
||||||
static char TtyName[32];
|
static char TtyName[32];
|
||||||
|
@ -767,6 +767,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1225,
|
||||||
/**/
|
/**/
|
||||||
1224,
|
1224,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user