SDL: SDL_RegisterEvents() now returns 0 if it couldn't allocate any user events.

From 860155680d21b7fefd3aea566f24599b7403bb01 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Wed, 6 Mar 2024 09:51:05 -0800
Subject: [PATCH] SDL_RegisterEvents() now returns 0 if it couldn't allocate
 any user events.

---
 docs/README-migration.md  | 2 ++
 include/SDL3/SDL_events.h | 9 +--------
 src/events/SDL_events.c   | 4 +---
 test/testmessage.c        | 2 +-
 4 files changed, 5 insertions(+), 12 deletions(-)

diff --git a/docs/README-migration.md b/docs/README-migration.md
index f5b00db1015a2..0089142f1ecf2 100644
--- a/docs/README-migration.md
+++ b/docs/README-migration.md
@@ -338,6 +338,8 @@ SDL_QUERY, SDL_IGNORE, SDL_ENABLE, and SDL_DISABLE have been removed. You can us
 
 SDL_AddEventWatch() now returns -1 if it fails because it ran out of memory and couldn't add the event watch callback.
 
+SDL_RegisterEvents() now returns 0 if it couldn't allocate any user events.
+
 The following symbols have been renamed:
 * SDL_APP_DIDENTERBACKGROUND => SDL_EVENT_DID_ENTER_BACKGROUND
 * SDL_APP_DIDENTERFOREGROUND => SDL_EVENT_DID_ENTER_FOREGROUND
diff --git a/include/SDL3/SDL_events.h b/include/SDL3/SDL_events.h
index 80709f9ec71f6..4c30950c29aa8 100644
--- a/include/SDL3/SDL_events.h
+++ b/include/SDL3/SDL_events.h
@@ -1199,15 +1199,8 @@ extern DECLSPEC SDL_bool SDLCALL SDL_EventEnabled(Uint32 type);
  * Allocate a set of user-defined events, and return the beginning event
  * number for that set of events.
  *
- * Calling this function with `numevents` <= 0 is an error and will return
- * (Uint32)-1.
- *
- * Note, (Uint32)-1 means the maximum unsigned 32-bit integer value (or
- * 0xFFFFFFFF), but is clearer to write.
- *
  * \param numevents the number of events to be allocated
- * \returns the beginning event number, or (Uint32)-1 if there are not enough
- *          user-defined events left.
+ * \returns the beginning event number, or 0 if numevents is invalid or if there are not enough user-defined events left.
  *
  * \since This function is available since SDL 3.0.0.
  *
diff --git a/src/events/SDL_events.c b/src/events/SDL_events.c
index baaff2c992b65..c8cf8afb54723 100644
--- a/src/events/SDL_events.c
+++ b/src/events/SDL_events.c
@@ -1447,13 +1447,11 @@ SDL_bool SDL_EventEnabled(Uint32 type)
 
 Uint32 SDL_RegisterEvents(int numevents)
 {
-    Uint32 event_base;
+    Uint32 event_base = 0;
 
     if ((numevents > 0) && (SDL_userevents + numevents <= SDL_EVENT_LAST)) {
         event_base = SDL_userevents;
         SDL_userevents += numevents;
-    } else {
-        event_base = (Uint32)-1;
     }
     return event_base;
 }
diff --git a/test/testmessage.c b/test/testmessage.c
index 056a1d5ea885c..2b8e39439102e 100644
--- a/test/testmessage.c
+++ b/test/testmessage.c
@@ -182,7 +182,7 @@ int main(int argc, char *argv[])
     {
         int status = 0;
         SDL_Event event;
-        intptr_t eventNumber = SDL_RegisterEvents(1);
+        Uint32 eventNumber = SDL_RegisterEvents(1);
         SDL_Thread *thread = SDL_CreateThread(&button_messagebox, "MessageBox", (void *)eventNumber);
 
         while (SDL_WaitEvent(&event)) {