From 77dba004a9aaf35f183f61ff6875a491a52aa030 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Sun, 3 Feb 2008 10:10:46 +1030 Subject: [PATCH] dix: add InputEventListLen and SetMinimumEventSize The latter is used to increase the amount of allocated memory for the event list. This will be needed for ClassesChangedEvents that can be of more or less arbitrary size (larger than 32 anyway). --- dix/events.c | 3 ++- dix/getevents.c | 24 ++++++++++++++++++++++++ include/input.h | 4 ++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/dix/events.c b/dix/events.c index 1155178b1..bf2df9f44 100644 --- a/dix/events.c +++ b/dix/events.c @@ -5712,7 +5712,8 @@ InitEvents(void) DontPropagateRefCnts[i] = 0; } - InputEventList = InitEventList(GetMaximumEventsNum()); + InputEventListLen = GetMaximumEventsNum(); + InputEventList = InitEventList(InputEventListLen); if (!InputEventList) FatalError("[dix] Failed to allocate input event list.\n"); } diff --git a/dix/getevents.c b/dix/getevents.c index 2a9df0f40..407ac58b2 100644 --- a/dix/getevents.c +++ b/dix/getevents.c @@ -75,6 +75,7 @@ extern Bool XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies); * Get{Pointer|Keyboard}Events. */ EventListPtr InputEventList = NULL; +int InputEventListLen = 0; _X_EXPORT EventListPtr GetEventList() @@ -598,6 +599,29 @@ InitEventList(int num_events) return events; } +/** + * Allocs min_size memory for each event in the list. + */ +_X_EXPORT void +SetMinimumEventSize(EventListPtr list, int num_events, int min_size) +{ + if (!list) + return; + + while(num_events--) + { + if (list[num_events].evlen < min_size) + { + list[num_events].event = realloc(list[num_events].event, min_size); + if (!list[num_events].event) + { + FatalError("[dix] Failed to set event list's " + "min_size to %d.\n", min_size); + } + } + } +} + /** * Free an event list. * diff --git a/include/input.h b/include/input.h index fb24e7637..af330a798 100644 --- a/include/input.h +++ b/include/input.h @@ -96,6 +96,7 @@ typedef struct _EventList { /* The DIX stores incoming input events in this list */ extern EventListPtr InputEventList; +extern int InputEventListLen; typedef int (*DeviceProc)( DeviceIntPtr /*device*/, @@ -400,6 +401,9 @@ extern int GetMaximumEventsNum(void); extern EventListPtr GetEventList(); extern EventListPtr InitEventList(int num_events); +extern void SetMinimumEventSize(EventListPtr list, + int num_events, + int min_size); extern void FreeEventList(EventListPtr list, int num_events); extern void CreateClassesChangedEvent(EventListPtr event,