aboutsummaryrefslogtreecommitdiffstats
path: root/src/xgselect.c
diff options
context:
space:
mode:
authorPaul Eggert2011-08-04 19:15:35 -0700
committerPaul Eggert2011-08-04 19:15:35 -0700
commit0065d05491ce5981ea20896bb26d21dcd31e6769 (patch)
tree13240167319d4a99ab5eacae4a883258eb2d28de /src/xgselect.c
parent18ab493650d648ab8dca651ea2698861f926e895 (diff)
downloademacs-0065d05491ce5981ea20896bb26d21dcd31e6769.tar.gz
emacs-0065d05491ce5981ea20896bb26d21dcd31e6769.zip
Adjust in response to jan.h.d's comments.
See, for example <http://debbugs.gnu.org/cgi/bugreport.cgi?bug=9196#26>.
Diffstat (limited to 'src/xgselect.c')
-rw-r--r--src/xgselect.c13
1 files changed, 3 insertions, 10 deletions
diff --git a/src/xgselect.c b/src/xgselect.c
index d1844610077..339ec475117 100644
--- a/src/xgselect.c
+++ b/src/xgselect.c
@@ -29,7 +29,7 @@ along with GNU Emacs. If not, see <http§://www.gnu.org/licenses/>. */
29#include <setjmp.h> 29#include <setjmp.h>
30 30
31static GPollFD *gfds; 31static GPollFD *gfds;
32static int gfds_size; 32static ptrdiff_t gfds_size;
33 33
34int 34int
35xg_select (int max_fds, SELECT_TYPE *rfds, SELECT_TYPE *wfds, SELECT_TYPE *efds, 35xg_select (int max_fds, SELECT_TYPE *rfds, SELECT_TYPE *wfds, SELECT_TYPE *efds,
@@ -54,16 +54,9 @@ xg_select (int max_fds, SELECT_TYPE *rfds, SELECT_TYPE *wfds, SELECT_TYPE *efds,
54 do { 54 do {
55 if (n_gfds > gfds_size) 55 if (n_gfds > gfds_size)
56 { 56 {
57 int gfds_size_max =
58 min (INT_MAX, min (PTRDIFF_MAX, SIZE_MAX) / sizeof *gfds);
59 int size;
60 if (gfds_size_max / 2 < n_gfds)
61 memory_full (SIZE_MAX);
62 size = 2 * n_gfds;
63 gfds_size = 0;
64 xfree (gfds); 57 xfree (gfds);
65 gfds = xmalloc (sizeof *gfds * size); 58 gfds = xpalloc (0, &gfds_size, n_gfds - gfds_size, INT_MAX,
66 gfds_size = size; 59 sizeof *gfds);
67 } 60 }
68 61
69 n_gfds = g_main_context_query (context, 62 n_gfds = g_main_context_query (context,