From afe7c7a644888310651197b09e34a326f3e7e513 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 7 May 2024 14:03:25 -0700 Subject: [PATCH] Changed SDL_ClearError() to always return 0. This will provide a quick and easy way of clearing the error when a function succeeds, if we want to do that in a more widespread way. For now we guarantee that SDL_Init() will never have an error set when it returns successfully. Fixes https://github.com/libsdl-org/SDL/issues/8421 --- include/SDL3/SDL_error.h | 4 +++- src/SDL.c | 2 +- src/SDL_error.c | 3 ++- src/dynapi/SDL_dynapi_procs.h | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/include/SDL3/SDL_error.h b/include/SDL3/SDL_error.h index 93a7865760..3839faedd3 100644 --- a/include/SDL3/SDL_error.h +++ b/include/SDL3/SDL_error.h @@ -105,12 +105,14 @@ extern DECLSPEC const char *SDLCALL SDL_GetError(void); /** * Clear any previous error message for this thread. * + * \returns 0 + * * \since This function is available since SDL 3.0.0. * * \sa SDL_GetError * \sa SDL_SetError */ -extern DECLSPEC void SDLCALL SDL_ClearError(void); +extern DECLSPEC int SDLCALL SDL_ClearError(void); /** * \name Internal error functions diff --git a/src/SDL.c b/src/SDL.c index f3faf9d59d..1b3912f8c6 100644 --- a/src/SDL.c +++ b/src/SDL.c @@ -400,7 +400,7 @@ int SDL_InitSubSystem(Uint32 flags) (void)flags_initialized; /* make static analysis happy, since this only gets used in error cases. */ - return 0; + return SDL_ClearError(); quit_and_error: SDL_QuitSubSystem(flags_initialized); diff --git a/src/SDL_error.c b/src/SDL_error.c index f01fd3c88d..4133d95462 100644 --- a/src/SDL_error.c +++ b/src/SDL_error.c @@ -78,13 +78,14 @@ const char *SDL_GetError(void) } } -void SDL_ClearError(void) +int SDL_ClearError(void) { SDL_error *error = SDL_GetErrBuf(SDL_FALSE); if (error) { error->error = SDL_ErrorCodeNone; } + return 0; } /* Very common errors go here */ diff --git a/src/dynapi/SDL_dynapi_procs.h b/src/dynapi/SDL_dynapi_procs.h index b5a24f1b60..bc27e29904 100644 --- a/src/dynapi/SDL_dynapi_procs.h +++ b/src/dynapi/SDL_dynapi_procs.h @@ -107,7 +107,7 @@ SDL_DYNAPI_PROC(void,SDL_CleanupTLS,(void),(),) SDL_DYNAPI_PROC(int,SDL_ClearAudioStream,(SDL_AudioStream *a),(a),return) SDL_DYNAPI_PROC(int,SDL_ClearClipboardData,(void),(),return) SDL_DYNAPI_PROC(void,SDL_ClearComposition,(void),(),) -SDL_DYNAPI_PROC(void,SDL_ClearError,(void),(),) +SDL_DYNAPI_PROC(int,SDL_ClearError,(void),(),return) SDL_DYNAPI_PROC(int,SDL_ClearProperty,(SDL_PropertiesID a, const char *b),(a,b),return) SDL_DYNAPI_PROC(void,SDL_CloseAudioDevice,(SDL_AudioDeviceID a),(a),) SDL_DYNAPI_PROC(void,SDL_CloseCamera,(SDL_Camera *a),(a),)