1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
--- startx.cpp.old 2005-11-11 12:29:49.244146352 -0700
+++ startx.cpp 2005-11-11 12:34:11.169327672 -0700
@@ -64,8 +64,6 @@
userserverrc=$HOME/.xserverrc
sysserverrc=XINITDIR/xserverrc
-defaultclient=XTERM
-defaultserver=XSERVER
defaultclientargs=""
defaultserverargs="-nolisten tcp -br"
clientargs=""
@@ -107,60 +105,41 @@
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"
- else
- server=$defaultserver
- fi
+if [ x"$serverargs" = x ]; then
+ serverargs="$defaultserverargs"
fi
if [ x"$XAUTHORITY" = x ]; then
@@ -217,15 +196,8 @@
#endif
-#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"$removelist" != x ]; then
BINDIR/xauth remove $removelist
@@ -251,3 +223,15 @@
#if defined(sun)
kbd_mode -a
#endif
+}
+
+
+trap cleanup 0
+
+xinit $clientargs -- $serverargs -deferglyphs 16 &
+
+PID=$!
+
+wait $PID
+
+unset PID
--- xinit.c.old 2005-11-11 12:30:19.199592432 -0700
+++ xinit.c 2005-11-11 12:30:47.983216656 -0700
@@ -446,6 +446,7 @@
signal(SIGINT, sigCatch);
signal(SIGHUP, sigCatch);
signal(SIGPIPE, sigCatch);
+ signal(SIGTERM, sigCatch);
#else
/* Let those signal interrupt the wait() call in the main loop */
memset(&sa, 0, sizeof sa);
@@ -458,6 +459,7 @@
sigaction(SIGINT, &sa, NULL);
sigaction(SIGHUP, &sa, NULL);
sigaction(SIGPIPE, &sa, NULL);
+ sigaction(SIGTERM, &sa, NULL);
#endif
signal(SIGALRM, sigAlarm);
signal(SIGUSR1, sigUsr1);
|