summaryrefslogtreecommitdiff
path: root/x11/xview-lib/patches/patch-dm
blob: 19286a836f020868d2861283432f898665368ab3 (plain)
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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
$NetBSD: patch-dm,v 1.3 2008/08/30 20:01:28 dholland Exp $

--- lib/libxview/notify/ndet_loop.c.orig	1993-06-29 01:18:19.000000000 -0400
+++ lib/libxview/notify/ndet_loop.c	2008-08-30 14:21:48.000000000 -0400
@@ -14,13 +14,18 @@ static char     sccsid[] = "@(#)ndet_loo
  * Ndet_loop.c - Notification loop.
  */
 
+#include <sys/param.h>
 #include <xview_private/i18n_impl.h>
 #include <xview_private/ntfy.h>
 #include <xview_private/ndet.h>
 #include <xview_private/nint.h>
 #include <xview_private/ndis.h>	/* For ndis_dispatch */
 #ifndef SVR4
+#if !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__DragonFly__)
 #include <syscall.h>
+#else
+#include <sys/syscall.h>
+#endif
 #else SVR4
 #include <sys/syscall.h>
 #include <sys/poll.h>
@@ -35,8 +40,6 @@ static char     sccsid[] = "@(#)ndet_loo
 #include <stdio.h>		/* For temp debugging */
 #include <rpc/rpc.h>
 
-extern int      errno;
-
 pkg_private_data u_int ndet_flags = 0;
 pkg_private_data NTFY_CLIENT *ndet_clients = 0;
 pkg_private_data NTFY_CLIENT *ndet_client_latest = 0;
@@ -55,7 +58,7 @@ extern NTFY_CNDTBL *ntfy_cndtbl[NTFY_LAS
 
 /* NOTE! This assumes NSIG is 32. Not very portable */
 /* ndet_prev_sigvec needs to start off at all zeros */
-#ifndef SVR4
+#if 0 /*ndef SVR4*/
 pkg_private_data struct sigvec ndet_prev_sigvec[NSIG] = {
     {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
     {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
@@ -70,20 +73,19 @@ pkg_private_data struct sigvec ndet_prev
 pkg_private_data struct sigaction ndet_prev_sigvec[NSIG];
 #endif SVR4
 
-#ifdef vax			/* vax signal handlers return ints */
+#if 0 /*def vax*/		/* vax signal handlers return ints */
 pkg_private int ndet_signal_catcher();
 #else				/* sun signal handlers are void */
-pkg_private void ndet_signal_catcher();
+pkg_private void ndet_signal_catcher(int sig, siginfo_t *info, void *ctx);
 #endif
 
-#ifndef SVR4
+#if 0 /*ndef SVR4*/
 pkg_private_data struct sigvec ndet_sigvec = {ndet_signal_catcher, 0, 0};
 static int      ndet_signal_code;
 static struct sigcontext *ndet_signal_context;
 #else SVR4
-pkg_private_data struct sigaction ndet_sigvec =
-	{SA_RESTART, {ndet_signal_catcher}, {0}, {0,0}};
-	static int      ndet_signal_code;
+pkg_private_data struct sigaction ndet_sigvec;
+	static siginfo_t  *ndet_signal_code;
 	static ucontext_t *ndet_signal_context;
 #endif SVR4
 
@@ -224,7 +226,8 @@ notify_start()
 	     * will return with an EINTR when a signal arrives while IN
 	     * select, not ON THE WAY into select).
 	     */
-#ifndef SVR4
+
+#if !defined(SVR4) && !(defined(BSD) && (BSD >= 199103))
 	    nfds = syscall(SYS_select,
 			   FD_SETSIZE, &ibits, &obits, &ebits,
 		 (sigisempty(&ndet_sigs_received)) ? timer : &ndet_polling_tv);
@@ -715,7 +718,7 @@ ndet_fig_sig_change()
 		/*
 		 * Don't catch this signal, currently we are
 		 */
-#ifndef SVR4
+#if 0 /*ndef SVR4*/
 		n = sigvec(sig, &ndet_prev_sigvec[sig],
 			   (struct sigvec *) 0);	/* SYSTEM CALL */
 		ntfy_assert(n == 0, 6 /* Unexpected error: sigvec */);
@@ -743,11 +746,13 @@ ndet_enable_sig(sig)
 	int             n;
 
 	/* Arrange to catch this signal, currently we are not */
-#ifndef SVR4
+#if 0 /*ndef SVR4*/
 	n = sigvec(sig, &ndet_sigvec, &ndet_prev_sigvec[sig]);
 	/* SYSTEM CALL */
 	ntfy_assert(n == 0, 8 /* Unexpected error: sigvec */);
 #else SVR4
+	ndet_sigvec.sa_flags = SA_RESTART | SA_SIGINFO;
+	ndet_sigvec.sa_sigaction = ndet_signal_catcher;
         n = sigaction(sig, &ndet_sigvec, &ndet_prev_sigvec[sig]);
 	/* SYSTEM CALL */
 	ntfy_assert(n == 0, 9 /* Unexpected error: sigaction */);
@@ -758,25 +763,28 @@ ndet_enable_sig(sig)
 
 pkg_private_data int ndet_track_sigs = 0;
 
-#ifdef vax
+#if 0 /*def vax*/
 pkg_private int			/* Should be static but there might be
 				 * clients of it */
 #else
 pkg_private void		/* Should be static but there might be
 				 * clients of it */
 #endif
-ndet_signal_catcher(sig, code, scp)
+ndet_signal_catcher(sig, info, scp_v)
     int             sig;
-    int             code;
-#ifndef SVR4
-    struct sigcontext *scp;
+    siginfo_t       *info;
+    void            *scp_v;
+{
+#if 0 /*ndef SVR4*/
+    struct sigcontext *scp = scp_v;
 #else SVR4
-    ucontext_t *scp;
+    ucontext_t *scp = scp_v;
 #endif SVR4
-{
 
-#ifdef SVR4
-    void        (*old_handler) () = ndet_prev_sigvec[sig].sa_handler;
+#if 1 /*def SVR4*/
+    int		use_action = (ndet_prev_sigvec[sig].sa_flags & SA_SIGINFO) != 0;
+    void        (*old_handler) (int) = ndet_prev_sigvec[sig].sa_handler;
+    void        (*old_sigaction) (int, siginfo_t *, void *) = ndet_prev_sigvec[sig].sa_sigaction;
 #else
     void        (*old_handler) () = ndet_prev_sigvec[sig].sv_handler;
 #endif /* SVR4 */
@@ -803,7 +811,7 @@ ndet_signal_catcher(sig, code, scp)
     }
 
     NTFY_BEGIN_INTERRUPT;
-    ndet_signal_code = code;
+    ndet_signal_code = info;
     ndet_signal_context = scp;
     sigemptyset( &newmask );
     sigaddset( &newmask, sig );
@@ -817,8 +825,14 @@ Done:
      * definition but is included as a means of reducing compatibility
      * problems.
      */
-    if (old_handler != SIG_DFL && old_handler != SIG_IGN)
-	old_handler(sig, code, scp);
+    if (use_action) {
+        if (old_sigaction != SIG_DFL && old_sigaction != SIG_IGN)
+	    old_sigaction(sig, info, scp);
+    } else {
+        if (old_handler != SIG_DFL && old_handler != SIG_IGN)
+	    /*old_handler(sig, info, scp);*/
+	    old_handler(sig);
+    }
 
     /* This write guarentees that the select will return so the signal can
      * be processed.
@@ -1024,14 +1038,14 @@ notify_get_signal_check()
     return (ndet_signal_check);
 }
 
-extern int
+extern siginfo_t *
 notify_get_signal_code()
 {
     /* Could put check to see if in interrupt (should be) */
     return (ndet_signal_code);
 }
 
-#ifndef SVR4
+#if 0 /*ndef SVR4*/
 extern struct sigcontext *
 #else SVR4
 extern ucontext_t *