diff -urN xinit-1.0.8.orig/startx.cpp xinit-1.0.8/startx.cpp --- xinit-1.0.8.orig/startx.cpp 2008-03-08 21:26:55.000000000 -0800 +++ xinit-1.0.8/startx.cpp 2008-03-08 21:27:32.000000000 -0800 @@ -71,8 +71,6 @@ userserverrc=$HOME/.xserverrc sysserverrc=XINITDIR/xserverrc -defaultclient=XTERM -defaultserver=XSERVER defaultclientargs="" defaultserverargs="-nolisten tcp -br" clientargs="" @@ -158,63 +156,44 @@ whoseargs="client" while [ x"$1" != x ]; do case "$1" in - XCOMM '' required to prevent cpp from treating "/*" as a C comment. - /''*|\./''*) - if [ "$whoseargs" = "client" ]; then - if [ x"$clientargs" = x ]; then - client="$1" - else - clientargs="$clientargs $1" - fi - else - if [ x"$serverargs" = x ]; then - server="$1" - else - serverargs="$serverargs $1" - fi - fi - ;; - --) - whoseargs="server" - ;; - *) - if [ "$whoseargs" = "client" ]; then - clientargs="$clientargs $1" - else - XCOMM display must be the FIRST server argument - if [ x"$serverargs" = x ] && @@ - expr "$1" : ':[0-9][0-9]*$' > /dev/null 2>&1; then - display="$1" - else - serverargs="$serverargs $1" - fi - fi - ;; + /''*|\.*) if [ "$whoseargs" = "client" ]; then + if [ "x$clientargs" = x ]; then + clientargs="$1" + else + clientargs="$clientargs $1" + fi + else + if [ "x$serverargs" = x ]; then + serverargs="$1" + else + serverargs="$serverargs $1" + fi + fi ;; + --) whoseargs="server" ;; + *) if [ "$whoseargs" = "client" ]; then + if [ "x$clientargs" = x ]; then + clientargs="$defaultclientargs $1" + else + clientargs="$clientargs $1" + fi + else + case "$1" in + :[0-9]*) display="$1"; serverargs="$serverargs $1";; + *) serverargs="$serverargs $1" ;; + esac + fi ;; esac shift done -XCOMM process client arguments -if [ x"$client" = x ]; then - XCOMM if no client arguments either, use rc file instead - if [ x"$clientargs" = x ]; then - client="$defaultclientargs" - else - client=$defaultclient - fi +if [ x"$clientargs" = x ]; then + clientargs="$defaultclientargs" fi - -XCOMM process server arguments -if [ x"$server" = x ]; then - XCOMM if no server arguments or display either, use rc file instead - if [ x"$serverargs" = x -a x"$display" = x ]; then - server="$defaultserverargs" +if [ x"$serverargs" = x ]; then + serverargs="$defaultserverargs" #ifdef __APPLE__ display="$defaultdisplay" #endif - else - server=$defaultserver - fi fi if [ x"$enable_xauth" = x1 ] ; then @@ -279,15 +258,8 @@ done fi -#if defined(__SCO__) || defined(__UNIXWARE__) -if [ "$REMOTE_SERVER" = "TRUE" ]; then - exec SHELL_CMD ${client} -else - XINIT $client $clientargs -- $server $display $serverargs -fi -#else -XINIT $client $clientargs -- $server $display $serverargs -#endif +cleanup() { + [ -n "$PID" ] && kill $PID > /dev/null 2>&1 if [ x"$enable_xauth" = x1 ] ; then if [ x"$removelist" != x ]; then @@ -315,3 +287,15 @@ #if defined(sun) kbd_mode -a #endif +} + + +trap cleanup 0 + +xinit $clientargs -- $serverargs -deferglyphs 16 & + +PID=$! + +wait $PID + +unset PID diff -urN xinit-1.0.8.orig/xinit.c xinit-1.0.8/xinit.c --- xinit-1.0.8.orig/xinit.c 2008-03-08 21:26:55.000000000 -0800 +++ xinit-1.0.8/xinit.c 2008-03-08 21:27:06.000000000 -0800 @@ -479,6 +479,7 @@ sigaction(SIGINT, &sa, NULL); sigaction(SIGHUP, &sa, NULL); sigaction(SIGPIPE, &sa, NULL); + sigaction(SIGTERM, &sa, NULL); signal(SIGALRM, sigAlarm); signal(SIGUSR1, sigUsr1);