annotate src/xgselect.c @ 111193:e9767f86681c

Fix bug #7281. cmds.c (internal_self_insert): Don't insert if argument N is zero.
author Eli Zaretskii <eliz@gnu.org>
date Tue, 26 Oct 2010 20:03:34 +0200
parents 6a7fb61524be
children 417b1e4d63cd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
106186
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1 /* Function for handling the GLib event loop.
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 106352
diff changeset
2 Copyright (C) 2009, 2010
106186
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3 Free Software Foundation, Inc.
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
5 This file is part of GNU Emacs.
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
6
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
7 GNU Emacs is free software: you can redistribute it and/or modify
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
8 it under the terms of the GNU General Public License as published by
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
9 the Free Software Foundation, either version 3 of the License, or
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
10 (at your option) any later version.
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
11
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
12 GNU Emacs is distributed in the hope that it will be useful,
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
15 GNU General Public License for more details.
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
16
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
18 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
19
108861
ad09f2bfce51 Fix config.h includes.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106815
diff changeset
20 #include <config.h>
106186
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
21
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
22 #if defined (USE_GTK) || defined (HAVE_GCONF)
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
23 #include <glib.h>
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
24 #include <errno.h>
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
25 #include <setjmp.h>
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
26 #include "xgselect.h"
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
27
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
28 static GPollFD *gfds;
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
29 static int gfds_size;
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
30
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
31 int
109130
cd13b432f239 Fix more prototypes.
Juanma Barranquero <lekktu@gmail.com>
parents: 109126
diff changeset
32 xg_select (int max_fds, SELECT_TYPE *rfds, SELECT_TYPE *wfds, SELECT_TYPE *efds,
cd13b432f239 Fix more prototypes.
Juanma Barranquero <lekktu@gmail.com>
parents: 109126
diff changeset
33 EMACS_TIME *timeout)
106186
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
34 {
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
35 SELECT_TYPE all_rfds, all_wfds;
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
36 EMACS_TIME tmo, *tmop = timeout;
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
37
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
38 GMainContext *context = g_main_context_default ();
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
39 int have_wfds = wfds != NULL;
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
40 int n_gfds = 0, our_tmo = 0, retval = 0, our_fds = 0;
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
41 int prio, i, nfds, tmo_in_millisec;
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
42
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
43 if (rfds) memcpy (&all_rfds, rfds, sizeof (all_rfds));
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
44 else FD_ZERO (&all_rfds);
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
45 if (wfds) memcpy (&all_wfds, wfds, sizeof (all_rfds));
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
46 else FD_ZERO (&all_wfds);
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
47
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
48 /* Update event sources in GLib. */
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
49 g_main_context_pending (context);
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
50
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
51 do {
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
52 if (n_gfds > gfds_size)
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
53 {
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
54 while (n_gfds > gfds_size)
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
55 gfds_size *= 2;
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
56 xfree (gfds);
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
57 gfds = xmalloc (sizeof (*gfds) * gfds_size);
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
58 }
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
59
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
60 n_gfds = g_main_context_query (context,
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
61 G_PRIORITY_LOW,
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
62 &tmo_in_millisec,
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
63 gfds,
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
64 gfds_size);
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
65 } while (n_gfds > gfds_size);
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
66
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
67 for (i = 0; i < n_gfds; ++i)
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
68 {
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
69 if (gfds[i].events & G_IO_IN)
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
70 {
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
71 FD_SET (gfds[i].fd, &all_rfds);
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
72 if (gfds[i].fd > max_fds) max_fds = gfds[i].fd;
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
73 }
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
74 if (gfds[i].events & G_IO_OUT)
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
75 {
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
76 FD_SET (gfds[i].fd, &all_wfds);
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
77 if (gfds[i].fd > max_fds) max_fds = gfds[i].fd;
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
78 have_wfds = 1;
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
79 }
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
80 }
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
81
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
82 if (tmo_in_millisec >= 0)
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
83 {
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
84 EMACS_SET_SECS_USECS (tmo, tmo_in_millisec/1000,
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
85 1000 * (tmo_in_millisec % 1000));
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
86 if (!timeout) our_tmo = 1;
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
87 else
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
88 {
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
89 EMACS_TIME difference;
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
90
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
91 EMACS_SUB_TIME (difference, tmo, *timeout);
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
92 if (EMACS_TIME_NEG_P (difference)) our_tmo = 1;
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
93 }
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
94
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
95 if (our_tmo) tmop = &tmo;
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
96 }
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
97
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
98 nfds = select (max_fds+1, &all_rfds, have_wfds ? &all_wfds : NULL,
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
99 efds, tmop);
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
100
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
101 if (nfds < 0)
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
102 retval = nfds;
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
103 else if (nfds > 0)
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
104 {
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
105 for (i = 0; i < max_fds+1; ++i)
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
106 {
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
107 if (FD_ISSET (i, &all_rfds))
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
108 {
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
109 if (rfds && FD_ISSET (i, rfds)) ++retval;
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
110 else ++our_fds;
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
111 }
110617
4e2238ed599f * xgselect.c (xg_select): Clear file descriptors not set from rfds and wfds.
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
112 else if (rfds)
4e2238ed599f * xgselect.c (xg_select): Clear file descriptors not set from rfds and wfds.
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
113 FD_CLR (i, rfds);
4e2238ed599f * xgselect.c (xg_select): Clear file descriptors not set from rfds and wfds.
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
114
106186
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
115 if (have_wfds && FD_ISSET (i, &all_wfds))
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
116 {
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
117 if (wfds && FD_ISSET (i, wfds)) ++retval;
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
118 else ++our_fds;
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
119 }
110617
4e2238ed599f * xgselect.c (xg_select): Clear file descriptors not set from rfds and wfds.
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
120 else if (wfds)
4e2238ed599f * xgselect.c (xg_select): Clear file descriptors not set from rfds and wfds.
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
121 FD_CLR (i, wfds);
4e2238ed599f * xgselect.c (xg_select): Clear file descriptors not set from rfds and wfds.
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
122
106186
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
123 if (efds && FD_ISSET (i, efds))
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
124 ++retval;
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
125 }
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
126 }
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
127
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
128 if (our_fds > 0 || (nfds == 0 && our_tmo))
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
129 {
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
130
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
131 /* If Gtk+ is in use eventually gtk_main_iteration will be called,
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
132 unless retval is zero. */
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
133 #ifdef USE_GTK
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
134 if (retval == 0)
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
135 #endif
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
136 while (g_main_context_pending (context))
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
137 g_main_context_dispatch (context);
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
138
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
139 /* To not have to recalculate timeout, return like this. */
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
140 if (retval == 0)
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
141 {
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
142 retval = -1;
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
143 errno = EINTR;
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
144 }
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
145 }
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
146
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
147 return retval;
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
148 }
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
149 #endif /* defined (USE_GTK) || defined (HAVE_GCONF) */
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
150
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
151 void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 108861
diff changeset
152 xgselect_initialize (void)
106186
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
153 {
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
154 #if defined (USE_GTK) || defined (HAVE_GCONF)
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
155 gfds_size = 128;
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
156 gfds = xmalloc (sizeof (*gfds)*gfds_size);
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
157 #endif /* defined (USE_GTK) || defined (HAVE_GCONF) */
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
158 }
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
159
106352
3b90f039f42b Add arch tagline
Miles Bader <miles@gnu.org>
parents: 106186
diff changeset
160 /* arch-tag: c5873ee3-d1f6-44f9-9f3b-b14f70fd0e6a
3b90f039f42b Add arch tagline
Miles Bader <miles@gnu.org>
parents: 106186
diff changeset
161 (do not change this comment) */