use openpty(3) to grab a pseudo-tty, patterned after xterm; ok matthieu@
This commit is contained in:
parent
819b350709
commit
e0924b72dd
@ -1,5 +1,11 @@
|
||||
/* config.h.in. Generated from configure.ac by autoheader. */
|
||||
|
||||
/* Define to 1 if you have the `grantpt' function. */
|
||||
#undef HAVE_GRANTPT
|
||||
|
||||
/* Define to 1 if you have the `util' library (-lutil). */
|
||||
#undef HAVE_LIBUTIL
|
||||
|
||||
/* Define to 1 if you have the `z' library (-lz). */
|
||||
#undef HAVE_LIBZ
|
||||
|
||||
|
199
app/luit/configure
vendored
199
app/luit/configure
vendored
@ -3644,6 +3644,185 @@ $as_echo "$as_me: error: zlib not found" >&2;}
|
||||
fi
|
||||
|
||||
|
||||
# Check for openpty() in -lutil if the UNIX98-style pty functions are not
|
||||
# available. E.g. for GNU libc 2.0.
|
||||
|
||||
for ac_func in grantpt
|
||||
do
|
||||
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
||||
{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
|
||||
$as_echo_n "checking for $ac_func... " >&6; }
|
||||
if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
cat >conftest.$ac_ext <<_ACEOF
|
||||
/* confdefs.h. */
|
||||
_ACEOF
|
||||
cat confdefs.h >>conftest.$ac_ext
|
||||
cat >>conftest.$ac_ext <<_ACEOF
|
||||
/* end confdefs.h. */
|
||||
/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
|
||||
For example, HP-UX 11i <limits.h> declares gettimeofday. */
|
||||
#define $ac_func innocuous_$ac_func
|
||||
|
||||
/* System header to define __stub macros and hopefully few prototypes,
|
||||
which can conflict with char $ac_func (); below.
|
||||
Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
|
||||
<limits.h> exists even on freestanding compilers. */
|
||||
|
||||
#ifdef __STDC__
|
||||
# include <limits.h>
|
||||
#else
|
||||
# include <assert.h>
|
||||
#endif
|
||||
|
||||
#undef $ac_func
|
||||
|
||||
/* Override any GCC internal prototype to avoid an error.
|
||||
Use char because int might match the return type of a GCC
|
||||
builtin and then its argument prototype would still apply. */
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
#endif
|
||||
char $ac_func ();
|
||||
/* The GNU C library defines this for functions which it implements
|
||||
to always fail with ENOSYS. Some functions are actually named
|
||||
something starting with __ and the normal name is an alias. */
|
||||
#if defined __stub_$ac_func || defined __stub___$ac_func
|
||||
choke me
|
||||
#endif
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
return $ac_func ();
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
rm -f conftest.$ac_objext conftest$ac_exeext
|
||||
if { (ac_try="$ac_link"
|
||||
case "(($ac_try" in
|
||||
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
|
||||
*) ac_try_echo=$ac_try;;
|
||||
esac
|
||||
eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
|
||||
$as_echo "$ac_try_echo") >&5
|
||||
(eval "$ac_link") 2>conftest.er1
|
||||
ac_status=$?
|
||||
grep -v '^ *+' conftest.er1 >conftest.err
|
||||
rm -f conftest.er1
|
||||
cat conftest.err >&5
|
||||
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } && {
|
||||
test -z "$ac_c_werror_flag" ||
|
||||
test ! -s conftest.err
|
||||
} && test -s conftest$ac_exeext && {
|
||||
test "$cross_compiling" = yes ||
|
||||
$as_test_x conftest$ac_exeext
|
||||
}; then
|
||||
eval "$as_ac_var=yes"
|
||||
else
|
||||
$as_echo "$as_me: failed program was:" >&5
|
||||
sed 's/^/| /' conftest.$ac_ext >&5
|
||||
|
||||
eval "$as_ac_var=no"
|
||||
fi
|
||||
|
||||
rm -rf conftest.dSYM
|
||||
rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
|
||||
conftest$ac_exeext conftest.$ac_ext
|
||||
fi
|
||||
ac_res=`eval 'as_val=${'$as_ac_var'}
|
||||
$as_echo "$as_val"'`
|
||||
{ $as_echo "$as_me:$LINENO: result: $ac_res" >&5
|
||||
$as_echo "$ac_res" >&6; }
|
||||
if test `eval 'as_val=${'$as_ac_var'}
|
||||
$as_echo "$as_val"'` = yes; then
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
|
||||
_ACEOF
|
||||
|
||||
else
|
||||
|
||||
{ $as_echo "$as_me:$LINENO: checking for openpty in -lutil" >&5
|
||||
$as_echo_n "checking for openpty in -lutil... " >&6; }
|
||||
if test "${ac_cv_lib_util_openpty+set}" = set; then
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
ac_check_lib_save_LIBS=$LIBS
|
||||
LIBS="-lutil $LIBS"
|
||||
cat >conftest.$ac_ext <<_ACEOF
|
||||
/* confdefs.h. */
|
||||
_ACEOF
|
||||
cat confdefs.h >>conftest.$ac_ext
|
||||
cat >>conftest.$ac_ext <<_ACEOF
|
||||
/* end confdefs.h. */
|
||||
|
||||
/* Override any GCC internal prototype to avoid an error.
|
||||
Use char because int might match the return type of a GCC
|
||||
builtin and then its argument prototype would still apply. */
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
#endif
|
||||
char openpty ();
|
||||
int
|
||||
main ()
|
||||
{
|
||||
return openpty ();
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
rm -f conftest.$ac_objext conftest$ac_exeext
|
||||
if { (ac_try="$ac_link"
|
||||
case "(($ac_try" in
|
||||
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
|
||||
*) ac_try_echo=$ac_try;;
|
||||
esac
|
||||
eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
|
||||
$as_echo "$ac_try_echo") >&5
|
||||
(eval "$ac_link") 2>conftest.er1
|
||||
ac_status=$?
|
||||
grep -v '^ *+' conftest.er1 >conftest.err
|
||||
rm -f conftest.er1
|
||||
cat conftest.err >&5
|
||||
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } && {
|
||||
test -z "$ac_c_werror_flag" ||
|
||||
test ! -s conftest.err
|
||||
} && test -s conftest$ac_exeext && {
|
||||
test "$cross_compiling" = yes ||
|
||||
$as_test_x conftest$ac_exeext
|
||||
}; then
|
||||
ac_cv_lib_util_openpty=yes
|
||||
else
|
||||
$as_echo "$as_me: failed program was:" >&5
|
||||
sed 's/^/| /' conftest.$ac_ext >&5
|
||||
|
||||
ac_cv_lib_util_openpty=no
|
||||
fi
|
||||
|
||||
rm -rf conftest.dSYM
|
||||
rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
|
||||
conftest$ac_exeext conftest.$ac_ext
|
||||
LIBS=$ac_check_lib_save_LIBS
|
||||
fi
|
||||
{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_util_openpty" >&5
|
||||
$as_echo "$ac_cv_lib_util_openpty" >&6; }
|
||||
if test $ac_cv_lib_util_openpty = yes; then
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define HAVE_LIBUTIL 1
|
||||
_ACEOF
|
||||
|
||||
LIBS="-lutil $LIBS"
|
||||
|
||||
fi
|
||||
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
|
||||
# Check whether --with-localealiasfile was given.
|
||||
if test "${with_localealiasfile+set}" = set; then
|
||||
@ -3785,12 +3964,12 @@ if test -n "$PKG_CONFIG"; then
|
||||
pkg_cv_LUIT_CFLAGS="$LUIT_CFLAGS"
|
||||
else
|
||||
if test -n "$PKG_CONFIG" && \
|
||||
{ ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"x11 fontenc\"") >&5
|
||||
($PKG_CONFIG --exists --print-errors "x11 fontenc") 2>&5
|
||||
{ ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"fontenc\"") >&5
|
||||
($PKG_CONFIG --exists --print-errors "fontenc") 2>&5
|
||||
ac_status=$?
|
||||
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); }; then
|
||||
pkg_cv_LUIT_CFLAGS=`$PKG_CONFIG --cflags "x11 fontenc" 2>/dev/null`
|
||||
pkg_cv_LUIT_CFLAGS=`$PKG_CONFIG --cflags "fontenc" 2>/dev/null`
|
||||
else
|
||||
pkg_failed=yes
|
||||
fi
|
||||
@ -3803,12 +3982,12 @@ if test -n "$PKG_CONFIG"; then
|
||||
pkg_cv_LUIT_LIBS="$LUIT_LIBS"
|
||||
else
|
||||
if test -n "$PKG_CONFIG" && \
|
||||
{ ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"x11 fontenc\"") >&5
|
||||
($PKG_CONFIG --exists --print-errors "x11 fontenc") 2>&5
|
||||
{ ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"fontenc\"") >&5
|
||||
($PKG_CONFIG --exists --print-errors "fontenc") 2>&5
|
||||
ac_status=$?
|
||||
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); }; then
|
||||
pkg_cv_LUIT_LIBS=`$PKG_CONFIG --libs "x11 fontenc" 2>/dev/null`
|
||||
pkg_cv_LUIT_LIBS=`$PKG_CONFIG --libs "fontenc" 2>/dev/null`
|
||||
else
|
||||
pkg_failed=yes
|
||||
fi
|
||||
@ -3827,14 +4006,14 @@ else
|
||||
_pkg_short_errors_supported=no
|
||||
fi
|
||||
if test $_pkg_short_errors_supported = yes; then
|
||||
LUIT_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "x11 fontenc"`
|
||||
LUIT_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "fontenc"`
|
||||
else
|
||||
LUIT_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "x11 fontenc"`
|
||||
LUIT_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "fontenc"`
|
||||
fi
|
||||
# Put the nasty error message in config.log where it belongs
|
||||
echo "$LUIT_PKG_ERRORS" >&5
|
||||
|
||||
{ { $as_echo "$as_me:$LINENO: error: Package requirements (x11 fontenc) were not met:
|
||||
{ { $as_echo "$as_me:$LINENO: error: Package requirements (fontenc) were not met:
|
||||
|
||||
$LUIT_PKG_ERRORS
|
||||
|
||||
@ -3845,7 +4024,7 @@ Alternatively, you may set the environment variables LUIT_CFLAGS
|
||||
and LUIT_LIBS to avoid the need to call pkg-config.
|
||||
See the pkg-config man page for more details.
|
||||
" >&5
|
||||
$as_echo "$as_me: error: Package requirements (x11 fontenc) were not met:
|
||||
$as_echo "$as_me: error: Package requirements (fontenc) were not met:
|
||||
|
||||
$LUIT_PKG_ERRORS
|
||||
|
||||
|
@ -34,6 +34,10 @@ AC_CANONICAL_HOST
|
||||
|
||||
AC_CHECK_LIB(z, gzopen,, AC_MSG_ERROR([zlib not found]))
|
||||
|
||||
# Check for openpty() in -lutil if the UNIX98-style pty functions are not
|
||||
# available. E.g. for GNU libc 2.0.
|
||||
AC_CHECK_FUNCS(grantpt, [], AC_CHECK_LIB(util,openpty))
|
||||
|
||||
AC_ARG_WITH(localealiasfile,
|
||||
AC_HELP_STRING([--with-localealiasfile=<path>],
|
||||
[The locale alias file (default: ${datadir}/X11/locale/locale.alias)]),
|
||||
@ -42,7 +46,7 @@ AC_ARG_WITH(localealiasfile,
|
||||
AC_SUBST([LOCALEALIASFILE])
|
||||
|
||||
# Checks for pkg-config packages
|
||||
PKG_CHECK_MODULES(LUIT, x11 fontenc)
|
||||
PKG_CHECK_MODULES(LUIT, fontenc)
|
||||
|
||||
case $host_os in
|
||||
linux*)
|
||||
|
@ -34,6 +34,10 @@ THE SOFTWARE.
|
||||
#include <signal.h>
|
||||
#include <errno.h>
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#ifdef SVR4
|
||||
#define HAVE_POLL
|
||||
#endif
|
||||
@ -54,16 +58,21 @@ THE SOFTWARE.
|
||||
#endif
|
||||
|
||||
|
||||
#if (defined(__GLIBC__) && \
|
||||
(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1))) || \
|
||||
defined(SVR4)
|
||||
#define HAVE_GRANTPT
|
||||
#endif
|
||||
|
||||
#ifdef __GLIBC__
|
||||
#include <pty.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_LIBUTIL
|
||||
#if defined(__OpenBSD__) || defined(__NetBSD__) || defined(__APPLE__)
|
||||
#include <util.h>
|
||||
#define HAVE_OPENPTY
|
||||
#endif
|
||||
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
||||
#include <libutil.h>
|
||||
#define HAVE_OPENPTY
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef SVR4
|
||||
#include <stropts.h>
|
||||
#endif
|
||||
@ -327,6 +336,10 @@ fix_pty_perms(char *line)
|
||||
return 1;
|
||||
}
|
||||
|
||||
#ifdef HAVE_OPENPTY
|
||||
static int opened_tty = -1;
|
||||
#endif
|
||||
|
||||
int
|
||||
allocatePty(int *pty_return, char **line_return)
|
||||
{
|
||||
@ -372,10 +385,16 @@ allocatePty(int *pty_return, char **line_return)
|
||||
*pty_return = pty;
|
||||
*line_return = line;
|
||||
return 0;
|
||||
|
||||
bsd:
|
||||
#endif /* HAVE_GRANTPT */
|
||||
|
||||
#ifdef HAVE_OPENPTY
|
||||
if(openpty(pty_return, &opened_tty, NULL, NULL, NULL) < 0)
|
||||
return -1;
|
||||
*line_return = NULL; /* unused, but free()ed */
|
||||
return 0;
|
||||
#endif /* HAVE_OPENPTY */
|
||||
|
||||
bsd:
|
||||
strcpy(name, "/dev/pty??");
|
||||
for(p1 = name1; *p1; p1++) {
|
||||
name[8] = *p1;
|
||||
@ -416,7 +435,11 @@ openTty(char *line)
|
||||
int rc;
|
||||
int tty = -1;
|
||||
|
||||
#if !defined(HAVE_GRANTPT) && defined(HAVE_OPENPTY)
|
||||
tty = opened_tty;
|
||||
#else
|
||||
tty = open(line, O_RDWR | O_NOCTTY);
|
||||
#endif
|
||||
|
||||
if(tty < 0)
|
||||
goto bail;
|
||||
|
Loading…
Reference in New Issue
Block a user