annotate src/xgselect.c @ 111773:7db1ebaea814

mail/rmailmm.el (rmail-mime-insert-multipart): For unsupported multipart subtypes, insert all as usual.
author Kenichi Handa <handa@m17n.org>
date Fri, 26 Nov 2010 21:58:41 +0900
parents 4e2238ed599f
children 6a7fb61524be 376148b31b5e
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
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
20 #include "config.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
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
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
32 xg_select (max_fds, rfds, wfds, efds, 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
33 int max_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
34 SELECT_TYPE *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
35 SELECT_TYPE *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 SELECT_TYPE *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
37 EMACS_TIME *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
38 {
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 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
40 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
41
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 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
43 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
44 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
45 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
46
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 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
48 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
49 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
50 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
51
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 /* 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
53 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
54
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 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
56 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
57 {
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 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
59 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
60 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
61 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
62 }
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
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 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
65 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
66 &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
67 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
68 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
69 } 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
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 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
72 {
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 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
74 {
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 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
76 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
77 }
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 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
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 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
81 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
82 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
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 }
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
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 (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
87 {
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 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
89 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
90 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
91 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
92 {
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 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
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 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
96 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
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
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 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
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
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 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
103 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
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 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
106 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
107 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
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 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
110 {
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 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
112 {
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
113 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
114 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
115 }
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
116 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
117 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
118
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
119 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
120 {
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
121 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
122 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
123 }
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
124 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
125 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
126
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
127 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
128 ++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
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
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 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
133 {
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
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 /* 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
136 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
137 #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
138 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
139 #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
140 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
141 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
142
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 /* 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
144 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
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 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
147 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
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 }
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 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
152 }
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 #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
154
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 void
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 xgselect_initialize ()
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 {
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 #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
159 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
160 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
161 #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
162 }
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
163
106352
3b90f039f42b Add arch tagline
Miles Bader <miles@gnu.org>
parents: 106186
diff changeset
164 /* arch-tag: c5873ee3-d1f6-44f9-9f3b-b14f70fd0e6a
3b90f039f42b Add arch tagline
Miles Bader <miles@gnu.org>
parents: 106186
diff changeset
165 (do not change this comment) */