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
This commit is contained in:
Sam Lantinga
2024-05-07 14:03:25 -07:00
parent 991d28ae37
commit afe7c7a644
4 changed files with 7 additions and 4 deletions

View File

@@ -105,12 +105,14 @@ extern DECLSPEC const char *SDLCALL SDL_GetError(void);
/** /**
* Clear any previous error message for this thread. * Clear any previous error message for this thread.
* *
* \returns 0
*
* \since This function is available since SDL 3.0.0. * \since This function is available since SDL 3.0.0.
* *
* \sa SDL_GetError * \sa SDL_GetError
* \sa SDL_SetError * \sa SDL_SetError
*/ */
extern DECLSPEC void SDLCALL SDL_ClearError(void); extern DECLSPEC int SDLCALL SDL_ClearError(void);
/** /**
* \name Internal error functions * \name Internal error functions

View File

@@ -400,7 +400,7 @@ int SDL_InitSubSystem(Uint32 flags)
(void)flags_initialized; /* make static analysis happy, since this only gets used in error cases. */ (void)flags_initialized; /* make static analysis happy, since this only gets used in error cases. */
return 0; return SDL_ClearError();
quit_and_error: quit_and_error:
SDL_QuitSubSystem(flags_initialized); SDL_QuitSubSystem(flags_initialized);

View File

@@ -78,13 +78,14 @@ const char *SDL_GetError(void)
} }
} }
void SDL_ClearError(void) int SDL_ClearError(void)
{ {
SDL_error *error = SDL_GetErrBuf(SDL_FALSE); SDL_error *error = SDL_GetErrBuf(SDL_FALSE);
if (error) { if (error) {
error->error = SDL_ErrorCodeNone; error->error = SDL_ErrorCodeNone;
} }
return 0;
} }
/* Very common errors go here */ /* Very common errors go here */

View File

@@ -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_ClearAudioStream,(SDL_AudioStream *a),(a),return)
SDL_DYNAPI_PROC(int,SDL_ClearClipboardData,(void),(),return) SDL_DYNAPI_PROC(int,SDL_ClearClipboardData,(void),(),return)
SDL_DYNAPI_PROC(void,SDL_ClearComposition,(void),(),) 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(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_CloseAudioDevice,(SDL_AudioDeviceID a),(a),)
SDL_DYNAPI_PROC(void,SDL_CloseCamera,(SDL_Camera *a),(a),) SDL_DYNAPI_PROC(void,SDL_CloseCamera,(SDL_Camera *a),(a),)