Author: mesyeti <mesyeti@mesyeti.uk>
fix UB again
source/event.c | 15 ++++++++-------
diff --git a/source/event.c b/source/event.c index 5b53cc5d61fa8abbabc3c19fa5842d8c67d74775..dfacedccc56a9d2f35f845e5f0396ab6cc301f9a 100644 --- a/source/event.c +++ b/source/event.c @@ -30,18 +30,20 @@ free(handlers); } } -static int FindFree(void) { +static Event* FindFree(void) { int i; for (i = 0; i < eventsSize; ++ i) { - if (events[i].type == EVENT_NONE) return i; + if (events[i].type == EVENT_NONE) { + return &events[i]; + } } for (i = 0; i < eventsSize; ++ i) { printf("Event %d: %d\n", i, (int) events[i].type); } - int old = eventsSize; + size_t old = eventsSize; events = SafeRealloc(events, eventsSize * 2 * sizeof(Event)); eventsSize *= 2; @@ -49,7 +51,7 @@ for (int i = old; i < eventsSize; ++ i) { events[i].type = EVENT_NONE; } - return old; + return &events[old]; } void Event_Add(Event e) { @@ -61,8 +63,7 @@ } } } - int idx = FindFree(); - events[idx] = e; + *FindFree() = e; } void Event_Update(void) { @@ -70,7 +71,7 @@ Event e; Event_PrepareExternal(); while (Event_PollExternal(&e)) { - events[FindFree()] = e; + *FindFree() = e; for (size_t i = 0; i < handlerNum; ++ i) { if (handlers[i].type == e.type) {