merge xinit 1.0.6
This commit is contained in:
parent
7fd4ac2fb1
commit
59ec33559d
@ -64,6 +64,7 @@ MANDEFS = \
|
|||||||
-D__miscmansuffix__=$(MISC_MAN_SUFFIX) \
|
-D__miscmansuffix__=$(MISC_MAN_SUFFIX) \
|
||||||
-D__XSERVERNAME__=Xorg -D__XCONFIGFILE__=xorg.conf \
|
-D__XSERVERNAME__=Xorg -D__XCONFIGFILE__=xorg.conf \
|
||||||
-D__xinitdir__=$(XINITDIR) \
|
-D__xinitdir__=$(XINITDIR) \
|
||||||
|
-D__bindir__=$(bindir) \
|
||||||
-DSHELL_CMD=$(SHELL_CMD) $(ARCHMANDEFS)
|
-DSHELL_CMD=$(SHELL_CMD) $(ARCHMANDEFS)
|
||||||
|
|
||||||
SUFFIXES = .$(APP_MAN_SUFFIX) .man
|
SUFFIXES = .$(APP_MAN_SUFFIX) .man
|
||||||
@ -100,5 +101,9 @@ xinitrc_DATA = xinitrc
|
|||||||
CLEANFILES = xinitrc startx $(appman_DATA)
|
CLEANFILES = xinitrc startx $(appman_DATA)
|
||||||
|
|
||||||
EXTRA_DIST = xinitrc.cpp startx.cpp $(appman_PRE) \
|
EXTRA_DIST = xinitrc.cpp startx.cpp $(appman_PRE) \
|
||||||
startx.cmd xinitrc.cmd xinit.def
|
startx.cmd xinitrc.cmd xinit.def ChangeLog autogen.sh
|
||||||
|
|
||||||
|
ChangeLog:
|
||||||
|
(GIT_DIR=$(top_srcdir)/.git git-log > .changelog.tmp && mv .changelog.tmp ChangeLog; rm -f .changelog.tmp) || (touch ChangeLog; echo 'git directory not found: installing possibly empty changelog.' >&2)
|
||||||
|
|
||||||
|
dist-hook: ChangeLog
|
||||||
|
@ -269,6 +269,7 @@ MANDEFS = \
|
|||||||
-D__miscmansuffix__=$(MISC_MAN_SUFFIX) \
|
-D__miscmansuffix__=$(MISC_MAN_SUFFIX) \
|
||||||
-D__XSERVERNAME__=Xorg -D__XCONFIGFILE__=xorg.conf \
|
-D__XSERVERNAME__=Xorg -D__XCONFIGFILE__=xorg.conf \
|
||||||
-D__xinitdir__=$(XINITDIR) \
|
-D__xinitdir__=$(XINITDIR) \
|
||||||
|
-D__bindir__=$(bindir) \
|
||||||
-DSHELL_CMD=$(SHELL_CMD) $(ARCHMANDEFS)
|
-DSHELL_CMD=$(SHELL_CMD) $(ARCHMANDEFS)
|
||||||
|
|
||||||
SUFFIXES = .$(APP_MAN_SUFFIX) .man
|
SUFFIXES = .$(APP_MAN_SUFFIX) .man
|
||||||
@ -292,7 +293,7 @@ SCRIPTDEFS = \
|
|||||||
xinitrc_DATA = xinitrc
|
xinitrc_DATA = xinitrc
|
||||||
CLEANFILES = xinitrc startx $(appman_DATA)
|
CLEANFILES = xinitrc startx $(appman_DATA)
|
||||||
EXTRA_DIST = xinitrc.cpp startx.cpp $(appman_PRE) \
|
EXTRA_DIST = xinitrc.cpp startx.cpp $(appman_PRE) \
|
||||||
startx.cmd xinitrc.cmd xinit.def
|
startx.cmd xinitrc.cmd xinit.def ChangeLog autogen.sh
|
||||||
|
|
||||||
all: config.h
|
all: config.h
|
||||||
$(MAKE) $(AM_MAKEFLAGS) all-am
|
$(MAKE) $(AM_MAKEFLAGS) all-am
|
||||||
@ -543,6 +544,9 @@ distdir: $(DISTFILES)
|
|||||||
|| exit 1; \
|
|| exit 1; \
|
||||||
fi; \
|
fi; \
|
||||||
done
|
done
|
||||||
|
$(MAKE) $(AM_MAKEFLAGS) \
|
||||||
|
top_distdir="$(top_distdir)" distdir="$(distdir)" \
|
||||||
|
dist-hook
|
||||||
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
|
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
|
||||||
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
||||||
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
||||||
@ -727,8 +731,8 @@ uninstall-am: uninstall-appmanDATA uninstall-binPROGRAMS \
|
|||||||
|
|
||||||
.PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \
|
.PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \
|
||||||
clean-binPROGRAMS clean-generic ctags dist dist-all dist-bzip2 \
|
clean-binPROGRAMS clean-generic ctags dist dist-all dist-bzip2 \
|
||||||
dist-gzip dist-shar dist-tarZ dist-zip distcheck distclean \
|
dist-gzip dist-hook dist-shar dist-tarZ dist-zip distcheck \
|
||||||
distclean-compile distclean-generic distclean-hdr \
|
distclean distclean-compile distclean-generic distclean-hdr \
|
||||||
distclean-tags distcleancheck distdir distuninstallcheck dvi \
|
distclean-tags distcleancheck distdir distuninstallcheck dvi \
|
||||||
dvi-am html html-am info info-am install install-am \
|
dvi-am html html-am info info-am install install-am \
|
||||||
install-appmanDATA install-binPROGRAMS install-binSCRIPTS \
|
install-appmanDATA install-binPROGRAMS install-binSCRIPTS \
|
||||||
@ -750,6 +754,11 @@ xinitrc: xinitrc.cpp
|
|||||||
|
|
||||||
startx: startx.cpp Makefile
|
startx: startx.cpp Makefile
|
||||||
$(RAWCPP) $(SCRIPTDEFS) < $(srcdir)/startx.cpp | $(CPP_SED_MAGIC) > $@
|
$(RAWCPP) $(SCRIPTDEFS) < $(srcdir)/startx.cpp | $(CPP_SED_MAGIC) > $@
|
||||||
|
|
||||||
|
ChangeLog:
|
||||||
|
(GIT_DIR=$(top_srcdir)/.git git-log > .changelog.tmp && mv .changelog.tmp ChangeLog; rm -f .changelog.tmp) || (touch ChangeLog; echo 'git directory not found: installing possibly empty changelog.' >&2)
|
||||||
|
|
||||||
|
dist-hook: ChangeLog
|
||||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||||
.NOEXPORT:
|
.NOEXPORT:
|
||||||
|
@ -6,6 +6,9 @@
|
|||||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||||
#undef HAVE_INTTYPES_H
|
#undef HAVE_INTTYPES_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `killpg' function. */
|
||||||
|
#undef HAVE_KILLPG
|
||||||
|
|
||||||
/* Define to 1 if you have the <memory.h> header file. */
|
/* Define to 1 if you have the <memory.h> header file. */
|
||||||
#undef HAVE_MEMORY_H
|
#undef HAVE_MEMORY_H
|
||||||
|
|
||||||
|
123
app/xinit/configure
vendored
123
app/xinit/configure
vendored
@ -1,6 +1,6 @@
|
|||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Guess values for system-dependent variables and create Makefiles.
|
# Guess values for system-dependent variables and create Makefiles.
|
||||||
# Generated by GNU Autoconf 2.59 for xinit 1.0.3.
|
# Generated by GNU Autoconf 2.59 for xinit 1.0.6.
|
||||||
#
|
#
|
||||||
# Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg>.
|
# Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg>.
|
||||||
#
|
#
|
||||||
@ -269,8 +269,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
|
|||||||
# Identity of this package.
|
# Identity of this package.
|
||||||
PACKAGE_NAME='xinit'
|
PACKAGE_NAME='xinit'
|
||||||
PACKAGE_TARNAME='xinit'
|
PACKAGE_TARNAME='xinit'
|
||||||
PACKAGE_VERSION='1.0.3'
|
PACKAGE_VERSION='1.0.6'
|
||||||
PACKAGE_STRING='xinit 1.0.3'
|
PACKAGE_STRING='xinit 1.0.6'
|
||||||
PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg'
|
PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg'
|
||||||
|
|
||||||
# Factoring default headers for most tests.
|
# Factoring default headers for most tests.
|
||||||
@ -791,7 +791,7 @@ if test "$ac_init_help" = "long"; then
|
|||||||
# Omit some internal or obsolete options to make the list less imposing.
|
# Omit some internal or obsolete options to make the list less imposing.
|
||||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||||
cat <<_ACEOF
|
cat <<_ACEOF
|
||||||
\`configure' configures xinit 1.0.3 to adapt to many kinds of systems.
|
\`configure' configures xinit 1.0.6 to adapt to many kinds of systems.
|
||||||
|
|
||||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||||
|
|
||||||
@ -857,7 +857,7 @@ fi
|
|||||||
|
|
||||||
if test -n "$ac_init_help"; then
|
if test -n "$ac_init_help"; then
|
||||||
case $ac_init_help in
|
case $ac_init_help in
|
||||||
short | recursive ) echo "Configuration of xinit 1.0.3:";;
|
short | recursive ) echo "Configuration of xinit 1.0.6:";;
|
||||||
esac
|
esac
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
|
|
||||||
@ -998,7 +998,7 @@ fi
|
|||||||
test -n "$ac_init_help" && exit 0
|
test -n "$ac_init_help" && exit 0
|
||||||
if $ac_init_version; then
|
if $ac_init_version; then
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
xinit configure 1.0.3
|
xinit configure 1.0.6
|
||||||
generated by GNU Autoconf 2.59
|
generated by GNU Autoconf 2.59
|
||||||
|
|
||||||
Copyright (C) 2003 Free Software Foundation, Inc.
|
Copyright (C) 2003 Free Software Foundation, Inc.
|
||||||
@ -1012,7 +1012,7 @@ cat >&5 <<_ACEOF
|
|||||||
This file contains any messages produced by compilers while
|
This file contains any messages produced by compilers while
|
||||||
running configure, to aid debugging if configure makes a mistake.
|
running configure, to aid debugging if configure makes a mistake.
|
||||||
|
|
||||||
It was created by xinit $as_me 1.0.3, which was
|
It was created by xinit $as_me 1.0.6, which was
|
||||||
generated by GNU Autoconf 2.59. Invocation command line was
|
generated by GNU Autoconf 2.59. Invocation command line was
|
||||||
|
|
||||||
$ $0 $@
|
$ $0 $@
|
||||||
@ -1655,7 +1655,7 @@ fi
|
|||||||
|
|
||||||
# Define the identity of the package.
|
# Define the identity of the package.
|
||||||
PACKAGE='xinit'
|
PACKAGE='xinit'
|
||||||
VERSION='1.0.3'
|
VERSION='1.0.6'
|
||||||
|
|
||||||
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
cat >>confdefs.h <<_ACEOF
|
||||||
@ -4296,6 +4296,109 @@ fi
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
for ac_func in killpg
|
||||||
|
do
|
||||||
|
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
||||||
|
echo "$as_me:$LINENO: checking for $ac_func" >&5
|
||||||
|
echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
|
||||||
|
if eval "test \"\${$as_ac_var+set}\" = set"; then
|
||||||
|
echo $ECHO_N "(cached) $ECHO_C" >&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 gcc2 internal prototype to avoid an error. */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
/* We use char because int might match the return type of a gcc2
|
||||||
|
builtin and then its argument prototype would still apply. */
|
||||||
|
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
|
||||||
|
#else
|
||||||
|
char (*f) () = $ac_func;
|
||||||
|
#endif
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
return f != $ac_func;
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
rm -f conftest.$ac_objext conftest$ac_exeext
|
||||||
|
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||||
|
(eval $ac_link) 2>conftest.er1
|
||||||
|
ac_status=$?
|
||||||
|
grep -v '^ *+' conftest.er1 >conftest.err
|
||||||
|
rm -f conftest.er1
|
||||||
|
cat conftest.err >&5
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); } &&
|
||||||
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); }; } &&
|
||||||
|
{ ac_try='test -s conftest$ac_exeext'
|
||||||
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); }; }; then
|
||||||
|
eval "$as_ac_var=yes"
|
||||||
|
else
|
||||||
|
echo "$as_me: failed program was:" >&5
|
||||||
|
sed 's/^/| /' conftest.$ac_ext >&5
|
||||||
|
|
||||||
|
eval "$as_ac_var=no"
|
||||||
|
fi
|
||||||
|
rm -f conftest.err conftest.$ac_objext \
|
||||||
|
conftest$ac_exeext conftest.$ac_ext
|
||||||
|
fi
|
||||||
|
echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
|
||||||
|
echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
|
||||||
|
if test `eval echo '${'$as_ac_var'}'` = yes; then
|
||||||
|
cat >>confdefs.h <<_ACEOF
|
||||||
|
#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
|
||||||
|
_ACEOF
|
||||||
|
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Build options
|
# Build options
|
||||||
DEFAULT_XRDB=xrdb
|
DEFAULT_XRDB=xrdb
|
||||||
@ -5213,7 +5316,7 @@ _ASBOX
|
|||||||
} >&5
|
} >&5
|
||||||
cat >&5 <<_CSEOF
|
cat >&5 <<_CSEOF
|
||||||
|
|
||||||
This file was extended by xinit $as_me 1.0.3, which was
|
This file was extended by xinit $as_me 1.0.6, which was
|
||||||
generated by GNU Autoconf 2.59. Invocation command line was
|
generated by GNU Autoconf 2.59. Invocation command line was
|
||||||
|
|
||||||
CONFIG_FILES = $CONFIG_FILES
|
CONFIG_FILES = $CONFIG_FILES
|
||||||
@ -5276,7 +5379,7 @@ _ACEOF
|
|||||||
|
|
||||||
cat >>$CONFIG_STATUS <<_ACEOF
|
cat >>$CONFIG_STATUS <<_ACEOF
|
||||||
ac_cs_version="\\
|
ac_cs_version="\\
|
||||||
xinit config.status 1.0.3
|
xinit config.status 1.0.6
|
||||||
configured by $0, generated by GNU Autoconf 2.59,
|
configured by $0, generated by GNU Autoconf 2.59,
|
||||||
with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
|
with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
|
||||||
|
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
dnl Copyright 2005 Red Hat, Inc.
|
dnl Copyright 2005 Red Hat, Inc.
|
||||||
dnl
|
dnl
|
||||||
dnl Permission to use, copy, modify, distribute, and sell this software and its
|
dnl Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
@ -22,7 +21,7 @@ dnl
|
|||||||
dnl Process this file with autoconf to create configure.
|
dnl Process this file with autoconf to create configure.
|
||||||
|
|
||||||
AC_PREREQ([2.57])
|
AC_PREREQ([2.57])
|
||||||
AC_INIT(xinit,[1.0.3], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],xinit)
|
AC_INIT(xinit,[1.0.6], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],xinit)
|
||||||
AM_INIT_AUTOMAKE([dist-bzip2])
|
AM_INIT_AUTOMAKE([dist-bzip2])
|
||||||
AM_MAINTAINER_MODE
|
AM_MAINTAINER_MODE
|
||||||
|
|
||||||
@ -37,6 +36,8 @@ AC_CANONICAL_HOST
|
|||||||
AC_TYPE_SIGNAL
|
AC_TYPE_SIGNAL
|
||||||
AC_FUNC_FORK
|
AC_FUNC_FORK
|
||||||
|
|
||||||
|
AC_CHECK_FUNCS([killpg])
|
||||||
|
|
||||||
m4_ifdef([AS_HELP_STRING], , [m4_define([AS_HELP_STRING], m4_defn([AC_HELP_STRING]))])
|
m4_ifdef([AS_HELP_STRING], , [m4_define([AS_HELP_STRING], m4_defn([AC_HELP_STRING]))])
|
||||||
|
|
||||||
# Build options
|
# Build options
|
||||||
|
@ -170,7 +170,6 @@ fi
|
|||||||
|
|
||||||
removelist=
|
removelist=
|
||||||
|
|
||||||
#if defined(HAS_COOKIE_MAKER) && defined(MK_COOKIE)
|
|
||||||
XCOMM set up default Xauth info for this machine
|
XCOMM set up default Xauth info for this machine
|
||||||
case `uname` in
|
case `uname` in
|
||||||
Linux*)
|
Linux*)
|
||||||
@ -186,7 +185,15 @@ Linux*)
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
authdisplay=${display:-:0}
|
authdisplay=${display:-:0}
|
||||||
|
#if defined(HAS_COOKIE_MAKER) && defined(MK_COOKIE)
|
||||||
mcookie=`MK_COOKIE`
|
mcookie=`MK_COOKIE`
|
||||||
|
#else
|
||||||
|
mcookie=`dd if=/dev/random bs=16 count=1 2>/dev/null | hexdump -e \\"%08x\\"`
|
||||||
|
if test x"$mcookie" = x; then
|
||||||
|
echo "Couldn't create cookie"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
#endif
|
||||||
dummy=0
|
dummy=0
|
||||||
|
|
||||||
XCOMM create a file with auth information for the server. ':0' is a dummy.
|
XCOMM create a file with auth information for the server. ':0' is a dummy.
|
||||||
@ -216,8 +223,6 @@ EOF
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__SCO__) || defined(__UNIXWARE__)
|
#if defined(__SCO__) || defined(__UNIXWARE__)
|
||||||
if [ "$REMOTE_SERVER" = "TRUE" ]; then
|
if [ "$REMOTE_SERVER" = "TRUE" ]; then
|
||||||
exec SHELL_CMD ${client}
|
exec SHELL_CMD ${client}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/* $Xorg: xinit.c,v 1.5 2001/02/09 02:05:49 xorgcvs Exp $ */
|
/* $Xorg: xinit.c,v 1.5 2001/02/09 02:05:49 xorgcvs Exp $ */
|
||||||
/* $XdotOrg: xc/programs/xinit/xinit.c,v 1.4 2005/10/04 01:27:34 ajax Exp $ */
|
/* $XdotOrg: xc/programs/xinit/xinit.c,v 1.4 2005/10/04 01:27:34 ajax Exp $ */
|
||||||
/* $OpenBSD: xinit.c,v 1.2 2006/11/26 17:17:57 matthieu Exp $ */
|
/* $OpenBSD: xinit.c,v 1.3 2007/09/15 17:12:01 matthieu Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
@ -35,8 +35,10 @@ in this Software without prior written authorization from The Open Group.
|
|||||||
|
|
||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
#include <X11/Xos.h>
|
#include <X11/Xos.h>
|
||||||
|
#include <X11/Xatom.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
#include <stdint.h>
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
|
|
||||||
#ifdef X_POSIX_C_SOURCE
|
#ifdef X_POSIX_C_SOURCE
|
||||||
@ -79,25 +81,26 @@ char **envsave; /* to circumvent an UNIXOS2 problem */
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
extern char **environ;
|
extern char **environ;
|
||||||
char **newenviron = NULL;
|
char **newenviron = NULL;
|
||||||
|
char **newenvironlast = NULL;
|
||||||
|
|
||||||
#ifndef SHELL
|
#ifndef SHELL
|
||||||
#define SHELL "sh"
|
#define SHELL "sh"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(HAS_VFORK) /* Imake */ && !defined(HAVE_WORKING_VFORK) /* autoconf*/
|
#ifndef HAVE_WORKING_VFORK
|
||||||
#ifndef vfork
|
# ifndef vfork
|
||||||
#define vfork() fork()
|
# define vfork() fork()
|
||||||
#endif
|
# endif
|
||||||
#else
|
#else
|
||||||
#if (defined(sun) && !defined(SVR4)) || defined(HAVE_VFORK_H)
|
# ifdef HAVE_VFORK_H
|
||||||
#include <vfork.h>
|
# include <vfork.h>
|
||||||
#endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* A/UX setpgid incorrectly removes the controlling terminal.
|
/* A/UX setpgid incorrectly removes the controlling terminal.
|
||||||
Per Posix, only setsid should do that. */
|
Per Posix, only setsid should do that. */
|
||||||
#if !defined(X_NOT_POSIX) && !defined(macII)
|
#ifdef macII
|
||||||
#define setpgrp setpgid
|
#define setpgid setpgrp
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __UNIXOS2__
|
#ifdef __UNIXOS2__
|
||||||
@ -110,12 +113,12 @@ char **newenviron = NULL;
|
|||||||
#define Execvpe(path, argv, envp) execvp(path, argv)
|
#define Execvpe(path, argv, envp) execvp(path, argv)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
char *bindir = BINDIR;
|
const char *bindir = BINDIR;
|
||||||
char *server_names[] = {
|
const char * const server_names[] = {
|
||||||
#if defined(ultrix) && defined(mips)
|
#if defined(ultrix) && defined(mips)
|
||||||
"Xdec Digital color display on DECstation",
|
"Xdec Digital color display on DECstation",
|
||||||
#endif
|
#endif
|
||||||
#ifdef sun /* Sun */
|
#if defined(sun) && !defined(XORG) /* Sun */
|
||||||
"Xsun Sun BW2, CG2, CG3, CG4, or CG6 on Sun 2, 3, 4, or 386i",
|
"Xsun Sun BW2, CG2, CG3, CG4, or CG6 on Sun 2, 3, 4, or 386i",
|
||||||
"Xsunmono Sun BW2 on Sun 2, 3, 4, or 386i ",
|
"Xsunmono Sun BW2 on Sun 2, 3, 4, or 386i ",
|
||||||
"Xsun24 Sun BW2, CG2, CG3, CG4, CG6, or CG8 on Sun 4",
|
"Xsun24 Sun BW2, CG2, CG3, CG4, CG6, or CG8 on Sun 4",
|
||||||
@ -133,14 +136,16 @@ char *server_names[] = {
|
|||||||
"XFree86 XFree86 displays",
|
"XFree86 XFree86 displays",
|
||||||
#endif
|
#endif
|
||||||
#ifdef XORG
|
#ifdef XORG
|
||||||
"Xorg X.Org displays",
|
"Xorg Common X server for most displays",
|
||||||
#endif
|
#endif
|
||||||
#ifdef __DARWIN__
|
#ifdef __DARWIN__
|
||||||
"XDarwin Darwin/Mac OS X IOKit displays",
|
"XDarwin Darwin/Mac OS X IOKit displays",
|
||||||
"XDarwinQuartz Mac OS X Quartz displays",
|
"XDarwinQuartz Mac OS X Quartz displays",
|
||||||
"XDarwinStartup Auto-select between XDarwin and XDarwinQuartz",
|
"XDarwinStartup Auto-select between XDarwin and XDarwinQuartz",
|
||||||
#endif
|
#endif
|
||||||
|
"Xvfb Virtual frame buffer",
|
||||||
|
"Xnest X server nested in a window on another X server",
|
||||||
|
"Xephyr kdrive-based nested X server",
|
||||||
NULL};
|
NULL};
|
||||||
|
|
||||||
#ifndef XINITRC
|
#ifndef XINITRC
|
||||||
@ -180,9 +185,7 @@ union wait status;
|
|||||||
#endif /* SYSV */
|
#endif /* SYSV */
|
||||||
int serverpid = -1;
|
int serverpid = -1;
|
||||||
int clientpid = -1;
|
int clientpid = -1;
|
||||||
#ifndef X_NOT_POSIX
|
|
||||||
volatile int gotSignal = 0;
|
volatile int gotSignal = 0;
|
||||||
#endif
|
|
||||||
|
|
||||||
static void Execute ( char **vec, char **envp );
|
static void Execute ( char **vec, char **envp );
|
||||||
static Bool waitforserver ( void );
|
static Bool waitforserver ( void );
|
||||||
@ -197,43 +200,13 @@ static void Error ( char *fmt, ... );
|
|||||||
|
|
||||||
#ifdef RETSIGTYPE /* autoconf AC_TYPE_SIGNAL */
|
#ifdef RETSIGTYPE /* autoconf AC_TYPE_SIGNAL */
|
||||||
# define SIGVAL RETSIGTYPE
|
# define SIGVAL RETSIGTYPE
|
||||||
#else /* Imake */
|
|
||||||
#ifdef SIGNALRETURNSINT
|
|
||||||
#define SIGVAL int
|
|
||||||
#else
|
|
||||||
#define SIGVAL void
|
|
||||||
#endif
|
|
||||||
#endif /* RETSIGTYPE */
|
#endif /* RETSIGTYPE */
|
||||||
|
|
||||||
#ifdef X_NOT_POSIX
|
|
||||||
/* Can't use Error() in signal handlers */
|
|
||||||
#ifndef STDERR_FILENO
|
|
||||||
#define WRITES(s) write(STDERR_FILENO, (s), strlen(s))
|
|
||||||
#else
|
|
||||||
#define WRITES(s) write(fileno(stderr), (s), strlen(s))
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static SIGVAL
|
static SIGVAL
|
||||||
sigCatch(int sig)
|
sigCatch(int sig)
|
||||||
{
|
{
|
||||||
#ifdef X_NOT_POSIX
|
|
||||||
char buf[1024];
|
|
||||||
|
|
||||||
signal(SIGTERM, SIG_IGN);
|
|
||||||
signal(SIGQUIT, SIG_IGN);
|
|
||||||
signal(SIGINT, SIG_IGN);
|
|
||||||
signal(SIGHUP, SIG_IGN);
|
|
||||||
signal(SIGPIPE, SIG_IGN);
|
|
||||||
snprintf(buf, sizeof buf, "%s: unexpected signal %d\r\n",
|
|
||||||
program, sig);
|
|
||||||
WRITES(buf);
|
|
||||||
shutdown();
|
|
||||||
_exit(ERR_EXIT);
|
|
||||||
#else
|
|
||||||
/* On system with POSIX signals, just interrupt the system call */
|
/* On system with POSIX signals, just interrupt the system call */
|
||||||
gotSignal = sig;
|
gotSignal = sig;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static SIGVAL
|
static SIGVAL
|
||||||
@ -283,9 +256,7 @@ main(int argc, char *argv[], char *envp[])
|
|||||||
int client_given = 0, server_given = 0;
|
int client_given = 0, server_given = 0;
|
||||||
int client_args_given = 0, server_args_given = 0;
|
int client_args_given = 0, server_args_given = 0;
|
||||||
int start_of_client_args, start_of_server_args;
|
int start_of_client_args, start_of_server_args;
|
||||||
#ifndef X_NOT_POSIX
|
|
||||||
struct sigaction sa;
|
struct sigaction sa;
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __UNIXOS2__
|
#ifdef __UNIXOS2__
|
||||||
envsave = envp; /* circumvent an EMX problem */
|
envsave = envp; /* circumvent an EMX problem */
|
||||||
@ -475,13 +446,7 @@ main(int argc, char *argv[], char *envp[])
|
|||||||
#ifdef SIGCHLD
|
#ifdef SIGCHLD
|
||||||
signal(SIGCHLD, SIG_DFL); /* Insurance */
|
signal(SIGCHLD, SIG_DFL); /* Insurance */
|
||||||
#endif
|
#endif
|
||||||
#ifdef X_NOT_POSIX
|
|
||||||
signal(SIGTERM, sigCatch);
|
|
||||||
signal(SIGQUIT, sigCatch);
|
|
||||||
signal(SIGINT, sigCatch);
|
|
||||||
signal(SIGHUP, sigCatch);
|
|
||||||
signal(SIGPIPE, sigCatch);
|
|
||||||
#else
|
|
||||||
/* Let those signal interrupt the wait() call in the main loop */
|
/* Let those signal interrupt the wait() call in the main loop */
|
||||||
memset(&sa, 0, sizeof sa);
|
memset(&sa, 0, sizeof sa);
|
||||||
sa.sa_handler = sigCatch;
|
sa.sa_handler = sigCatch;
|
||||||
@ -493,16 +458,14 @@ main(int argc, char *argv[], char *envp[])
|
|||||||
sigaction(SIGINT, &sa, NULL);
|
sigaction(SIGINT, &sa, NULL);
|
||||||
sigaction(SIGHUP, &sa, NULL);
|
sigaction(SIGHUP, &sa, NULL);
|
||||||
sigaction(SIGPIPE, &sa, NULL);
|
sigaction(SIGPIPE, &sa, NULL);
|
||||||
#endif
|
|
||||||
signal(SIGALRM, sigAlarm);
|
signal(SIGALRM, sigAlarm);
|
||||||
signal(SIGUSR1, sigUsr1);
|
signal(SIGUSR1, sigUsr1);
|
||||||
if (startServer(server) > 0
|
if (startServer(server) > 0
|
||||||
&& startClient(client) > 0) {
|
&& startClient(client) > 0) {
|
||||||
pid = -1;
|
pid = -1;
|
||||||
while (pid != clientpid && pid != serverpid
|
while (pid != clientpid && pid != serverpid
|
||||||
#ifndef X_NOT_POSIX
|
|
||||||
&& gotSignal == 0
|
&& gotSignal == 0
|
||||||
#endif
|
|
||||||
)
|
)
|
||||||
pid = wait(NULL);
|
pid = wait(NULL);
|
||||||
}
|
}
|
||||||
@ -513,12 +476,12 @@ main(int argc, char *argv[], char *envp[])
|
|||||||
signal(SIGPIPE, SIG_IGN);
|
signal(SIGPIPE, SIG_IGN);
|
||||||
|
|
||||||
shutdown();
|
shutdown();
|
||||||
#ifndef X_NOT_POSIX
|
|
||||||
if (gotSignal != 0) {
|
if (gotSignal != 0) {
|
||||||
Error("unexpected signal %d.\n", gotSignal);
|
Error("unexpected signal %d.\n", gotSignal);
|
||||||
exit(ERR_EXIT);
|
exit(ERR_EXIT);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
if (serverpid < 0 )
|
if (serverpid < 0 )
|
||||||
Fatal("Server error.\n");
|
Fatal("Server error.\n");
|
||||||
if (clientpid < 0)
|
if (clientpid < 0)
|
||||||
@ -596,32 +559,21 @@ processTimeout(int timeout, char *string)
|
|||||||
static int
|
static int
|
||||||
startServer(char *server[])
|
startServer(char *server[])
|
||||||
{
|
{
|
||||||
#if !defined(X_NOT_POSIX)
|
|
||||||
sigset_t mask, old;
|
sigset_t mask, old;
|
||||||
#else
|
|
||||||
int old;
|
|
||||||
#endif
|
|
||||||
#ifdef __UNIXOS2__
|
#ifdef __UNIXOS2__
|
||||||
sigset_t pendings;
|
sigset_t pendings;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(X_NOT_POSIX)
|
|
||||||
sigemptyset(&mask);
|
sigemptyset(&mask);
|
||||||
sigaddset(&mask, SIGUSR1);
|
sigaddset(&mask, SIGUSR1);
|
||||||
sigprocmask(SIG_BLOCK, &mask, &old);
|
sigprocmask(SIG_BLOCK, &mask, &old);
|
||||||
#else
|
|
||||||
old = sigblock (sigmask (SIGUSR1));
|
|
||||||
#endif
|
|
||||||
serverpid = fork();
|
serverpid = fork();
|
||||||
|
|
||||||
switch(serverpid) {
|
switch(serverpid) {
|
||||||
case 0:
|
case 0:
|
||||||
/* Unblock */
|
/* Unblock */
|
||||||
#ifndef X_NOT_POSIX
|
|
||||||
sigprocmask(SIG_SETMASK, &old, NULL);
|
sigprocmask(SIG_SETMASK, &old, NULL);
|
||||||
#else
|
|
||||||
sigsetmask (old);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* don't hang on read/write to control tty
|
* don't hang on read/write to control tty
|
||||||
@ -643,12 +595,12 @@ startServer(char *server[])
|
|||||||
* if client is xterm -L
|
* if client is xterm -L
|
||||||
*/
|
*/
|
||||||
#ifndef __UNIXOS2__
|
#ifndef __UNIXOS2__
|
||||||
setpgrp(0,getpid());
|
setpgid(0,getpid());
|
||||||
#endif
|
#endif
|
||||||
Execute (server, environ);
|
Execute (server, environ);
|
||||||
Error ("no server \"%s\" in PATH\n", server[0]);
|
Error ("no server \"%s\" in PATH\n", server[0]);
|
||||||
{
|
{
|
||||||
char **cpp;
|
const char * const *cpp;
|
||||||
|
|
||||||
fprintf (stderr,
|
fprintf (stderr,
|
||||||
"\nUse the -- option, or make sure that %s is in your path and\n",
|
"\nUse the -- option, or make sure that %s is in your path and\n",
|
||||||
@ -691,7 +643,6 @@ startServer(char *server[])
|
|||||||
*/
|
*/
|
||||||
alarm (15);
|
alarm (15);
|
||||||
|
|
||||||
#ifndef X_NOT_POSIX
|
|
||||||
#ifdef __UNIXOS2__
|
#ifdef __UNIXOS2__
|
||||||
/*
|
/*
|
||||||
* fg2003/05/06: work around a problem in EMX: sigsuspend()
|
* fg2003/05/06: work around a problem in EMX: sigsuspend()
|
||||||
@ -706,11 +657,6 @@ startServer(char *server[])
|
|||||||
sigsuspend(&old);
|
sigsuspend(&old);
|
||||||
alarm (0);
|
alarm (0);
|
||||||
sigprocmask(SIG_SETMASK, &old, NULL);
|
sigprocmask(SIG_SETMASK, &old, NULL);
|
||||||
#else
|
|
||||||
sigpause (old);
|
|
||||||
alarm (0);
|
|
||||||
sigsetmask (old);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (waitforserver() == 0) {
|
if (waitforserver() == 0) {
|
||||||
Error("unable to connect to X server\r\n");
|
Error("unable to connect to X server\r\n");
|
||||||
@ -723,15 +669,96 @@ startServer(char *server[])
|
|||||||
return(serverpid);
|
return(serverpid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
setWindowPath(void)
|
||||||
|
{
|
||||||
|
/* setting WINDOWPATH for clients */
|
||||||
|
Atom prop;
|
||||||
|
Atom actualtype;
|
||||||
|
int actualformat;
|
||||||
|
unsigned long nitems;
|
||||||
|
unsigned long bytes_after;
|
||||||
|
unsigned char *buf;
|
||||||
|
const char *windowpath;
|
||||||
|
char *newwindowpath;
|
||||||
|
unsigned long num;
|
||||||
|
char nums[10];
|
||||||
|
int numn;
|
||||||
|
prop = XInternAtom(xd, "XFree86_VT", False);
|
||||||
|
if (prop == None) {
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, "no XFree86_VT atom\n");
|
||||||
|
#endif
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (XGetWindowProperty(xd, DefaultRootWindow(xd), prop, 0, 1,
|
||||||
|
False, AnyPropertyType, &actualtype, &actualformat,
|
||||||
|
&nitems, &bytes_after, &buf)) {
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, "no XFree86_VT property\n");
|
||||||
|
#endif
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (nitems != 1) {
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, "%lu items in XFree86_VT property!\n", nitems);
|
||||||
|
#endif
|
||||||
|
XFree(buf);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
switch (actualtype) {
|
||||||
|
case XA_CARDINAL:
|
||||||
|
case XA_INTEGER:
|
||||||
|
case XA_WINDOW:
|
||||||
|
switch (actualformat) {
|
||||||
|
case 8:
|
||||||
|
num = (*(uint8_t *)(void *)buf);
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
num = (*(uint16_t *)(void *)buf);
|
||||||
|
break;
|
||||||
|
case 32:
|
||||||
|
num = (*(uint32_t *)(void *)buf);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, "format %d in XFree86_VT property!\n", actualformat);
|
||||||
|
#endif
|
||||||
|
XFree(buf);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, "type %lx in XFree86_VT property!\n", actualtype);
|
||||||
|
#endif
|
||||||
|
XFree(buf);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
XFree(buf);
|
||||||
|
windowpath = getenv("WINDOWPATH");
|
||||||
|
numn = snprintf(nums, sizeof(nums), "%lu", num);
|
||||||
|
if (!windowpath) {
|
||||||
|
newwindowpath = malloc(10 + 1 + numn + 1);
|
||||||
|
sprintf(newwindowpath, "WINDOWPATH=%s", nums);
|
||||||
|
} else {
|
||||||
|
newwindowpath = malloc(10 + 1 + strlen(windowpath) + 1 + numn + 1);
|
||||||
|
sprintf(newwindowpath, "WINDOWPATH=%s:%s", windowpath, nums);
|
||||||
|
}
|
||||||
|
*newenvironlast++ = newwindowpath;
|
||||||
|
*newenvironlast = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
startClient(char *client[])
|
startClient(char *client[])
|
||||||
{
|
{
|
||||||
|
setWindowPath();
|
||||||
if ((clientpid = vfork()) == 0) {
|
if ((clientpid = vfork()) == 0) {
|
||||||
if (setuid(getuid()) == -1) {
|
if (setuid(getuid()) == -1) {
|
||||||
Error("cannot change uid: %s\n", strerror(errno));
|
Error("cannot change uid: %s\n", strerror(errno));
|
||||||
_exit(ERR_EXIT);
|
_exit(ERR_EXIT);
|
||||||
}
|
}
|
||||||
setpgrp(0, getpid());
|
setpgid(0, getpid());
|
||||||
environ = newenviron;
|
environ = newenviron;
|
||||||
#ifdef __UNIXOS2__
|
#ifdef __UNIXOS2__
|
||||||
#undef environ
|
#undef environ
|
||||||
@ -750,7 +777,7 @@ startClient(char *client[])
|
|||||||
return (clientpid);
|
return (clientpid);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(X_NOT_POSIX) || defined(SYSV) || defined(__UNIXOS2__)
|
#ifndef HAVE_KILLPG
|
||||||
#define killpg(pgrp, sig) kill(-(pgrp), sig)
|
#define killpg(pgrp, sig) kill(-(pgrp), sig)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -830,11 +857,11 @@ set_environment(void)
|
|||||||
for (oldPtr = environ; *oldPtr; oldPtr++) ;
|
for (oldPtr = environ; *oldPtr; oldPtr++) ;
|
||||||
|
|
||||||
nenvvars = (oldPtr - environ);
|
nenvvars = (oldPtr - environ);
|
||||||
newenviron = (char **) malloc ((nenvvars + 2) * sizeof(char **));
|
newenviron = (char **) malloc ((nenvvars + 3) * sizeof(char **));
|
||||||
if (!newenviron) {
|
if (!newenviron) {
|
||||||
fprintf (stderr,
|
fprintf (stderr,
|
||||||
"%s: unable to allocate %d pointers for environment\n",
|
"%s: unable to allocate %d pointers for environment\n",
|
||||||
program, nenvvars + 2);
|
program, nenvvars + 3);
|
||||||
exit (1);
|
exit (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -846,11 +873,13 @@ set_environment(void)
|
|||||||
|
|
||||||
/* copy pointers to other variables */
|
/* copy pointers to other variables */
|
||||||
for (oldPtr = environ; *oldPtr; oldPtr++) {
|
for (oldPtr = environ; *oldPtr; oldPtr++) {
|
||||||
if (strncmp (*oldPtr, "DISPLAY=", 8) != 0) {
|
if (strncmp (*oldPtr, "DISPLAY=", 8) != 0
|
||||||
|
&& strncmp (*oldPtr, "WINDOWPATH=", 11) != 0) {
|
||||||
*newPtr++ = *oldPtr;
|
*newPtr++ = *oldPtr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*newPtr = NULL;
|
*newPtr = NULL;
|
||||||
|
newenvironlast=newPtr;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user