From 97d40b9218038edaf7afe61d6114fb48d8f26a82 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sun, 15 Sep 2024 09:55:38 -0700 Subject: [PATCH] Removed SDL_CleanupEnvironment() --- include/SDL3/SDL_stdinc.h | 21 +++------------------ src/SDL.c | 5 +++-- src/dynapi/SDL_dynapi.sym | 1 - src/dynapi/SDL_dynapi_overrides.h | 1 - src/dynapi/SDL_dynapi_procs.h | 1 - src/stdlib/SDL_getenv.c | 7 ++++++- src/stdlib/SDL_getenv_c.h | 24 ++++++++++++++++++++++++ 7 files changed, 36 insertions(+), 24 deletions(-) create mode 100644 src/stdlib/SDL_getenv_c.h diff --git a/include/SDL3/SDL_stdinc.h b/include/SDL3/SDL_stdinc.h index cbed61392..0f98b35d1 100644 --- a/include/SDL3/SDL_stdinc.h +++ b/include/SDL3/SDL_stdinc.h @@ -984,7 +984,6 @@ extern SDL_DECLSPEC int SDLCALL SDL_GetNumAllocations(void); * \since This struct is available since SDL 3.0.0. * * \sa SDL_GetEnvironment - * \sa SDL_CleanupEnvironment * \sa SDL_CreateEnvironment * \sa SDL_GetEnvironmentVariable * \sa SDL_GetEnvironmentVariables @@ -999,7 +998,9 @@ typedef struct SDL_Environment SDL_Environment; * * This is initialized at application start and is not affected by setenv() * and unsetenv() calls after that point. Use SDL_SetEnvironmentVariable() and - * SDL_UnsetEnvironmentVariable() if you want to modify this environment. + * SDL_UnsetEnvironmentVariable() if you want to modify this environment, or + * SDL_setenv_unsafe() or SDL_unsetenv_unsafe() if you want changes to persist + * in the C runtime environment after SDL_Quit(). * * \returns a pointer to the environment for the process or NULL on failure; * call SDL_GetError() for more information. @@ -1008,7 +1009,6 @@ typedef struct SDL_Environment SDL_Environment; * * \since This function is available since SDL 3.0.0. * - * \sa SDL_CleanupEnvironment * \sa SDL_GetEnvironmentVariable * \sa SDL_GetEnvironmentVariables * \sa SDL_SetEnvironmentVariable @@ -1016,21 +1016,6 @@ typedef struct SDL_Environment SDL_Environment; */ extern SDL_DECLSPEC SDL_Environment * SDLCALL SDL_GetEnvironment(void); -/** - * Cleanup the process environment. - * - * This is called during SDL_Quit() to free the process environment. If - * SDL_GetEnvironment() is called afterwards, it will automatically create a - * new environment copied from the C runtime environment. - * - * \threadsafety This function is not thread-safe. - * - * \since This function is available since SDL 3.0.0. - * - * \sa SDL_GetEnvironment - */ -extern SDL_DECLSPEC void SDLCALL SDL_CleanupEnvironment(void); - /** * Create a set of environment variables * diff --git a/src/SDL.c b/src/SDL.c index 63c3347fb..4e93d2738 100644 --- a/src/SDL.c +++ b/src/SDL.c @@ -49,6 +49,7 @@ #include "joystick/SDL_joystick_c.h" #include "render/SDL_sysrender.h" #include "sensor/SDL_sensor_c.h" +#include "stdlib/SDL_getenv_c.h" #include "thread/SDL_thread_c.h" #include "video/SDL_pixels_c.h" #include "video/SDL_video_c.h" @@ -250,23 +251,23 @@ void SDL_SetMainReady(void) void SDL_InitMainThread(void) { SDL_InitTLSData(); + SDL_InitEnvironment(); SDL_InitTicks(); SDL_InitFilesystem(); SDL_InitLog(); SDL_InitProperties(); SDL_GetGlobalProperties(); - SDL_GetEnvironment(); SDL_InitHints(); } static void SDL_QuitMainThread(void) { SDL_QuitHints(); - SDL_CleanupEnvironment(); SDL_QuitProperties(); SDL_QuitLog(); SDL_QuitFilesystem(); SDL_QuitTicks(); + SDL_QuitEnvironment(); SDL_QuitTLSData(); } diff --git a/src/dynapi/SDL_dynapi.sym b/src/dynapi/SDL_dynapi.sym index 01f6f506d..a1268d580 100644 --- a/src/dynapi/SDL_dynapi.sym +++ b/src/dynapi/SDL_dynapi.sym @@ -52,7 +52,6 @@ SDL3_0.0.0 { SDL_BroadcastCondition; SDL_CaptureMouse; SDL_ClaimWindowForGPUDevice; - SDL_CleanupEnvironment; SDL_CleanupTLS; SDL_ClearAudioStream; SDL_ClearClipboardData; diff --git a/src/dynapi/SDL_dynapi_overrides.h b/src/dynapi/SDL_dynapi_overrides.h index e0d1be092..341e316c7 100644 --- a/src/dynapi/SDL_dynapi_overrides.h +++ b/src/dynapi/SDL_dynapi_overrides.h @@ -77,7 +77,6 @@ #define SDL_BroadcastCondition SDL_BroadcastCondition_REAL #define SDL_CaptureMouse SDL_CaptureMouse_REAL #define SDL_ClaimWindowForGPUDevice SDL_ClaimWindowForGPUDevice_REAL -#define SDL_CleanupEnvironment SDL_CleanupEnvironment_REAL #define SDL_CleanupTLS SDL_CleanupTLS_REAL #define SDL_ClearAudioStream SDL_ClearAudioStream_REAL #define SDL_ClearClipboardData SDL_ClearClipboardData_REAL diff --git a/src/dynapi/SDL_dynapi_procs.h b/src/dynapi/SDL_dynapi_procs.h index 8c3c10a05..ae2a1e4dd 100644 --- a/src/dynapi/SDL_dynapi_procs.h +++ b/src/dynapi/SDL_dynapi_procs.h @@ -97,7 +97,6 @@ SDL_DYNAPI_PROC(SDL_bool,SDL_BlitSurfaceUncheckedScaled,(SDL_Surface *a, const S SDL_DYNAPI_PROC(void,SDL_BroadcastCondition,(SDL_Condition *a),(a),) SDL_DYNAPI_PROC(SDL_bool,SDL_CaptureMouse,(SDL_bool a),(a),return) SDL_DYNAPI_PROC(SDL_bool,SDL_ClaimWindowForGPUDevice,(SDL_GPUDevice *a, SDL_Window *b),(a,b),return) -SDL_DYNAPI_PROC(void,SDL_CleanupEnvironment,(void),(),) SDL_DYNAPI_PROC(void,SDL_CleanupTLS,(void),(),) SDL_DYNAPI_PROC(SDL_bool,SDL_ClearAudioStream,(SDL_AudioStream *a),(a),return) SDL_DYNAPI_PROC(SDL_bool,SDL_ClearClipboardData,(void),(),return) diff --git a/src/stdlib/SDL_getenv.c b/src/stdlib/SDL_getenv.c index 0243b9bf9..c78b95167 100644 --- a/src/stdlib/SDL_getenv.c +++ b/src/stdlib/SDL_getenv.c @@ -66,7 +66,12 @@ SDL_Environment *SDL_GetEnvironment(void) return SDL_environment; } -void SDL_CleanupEnvironment(void) +SDL_bool SDL_InitEnvironment(void) +{ + return (SDL_GetEnvironment() != NULL); +} + +void SDL_QuitEnvironment(void) { SDL_Environment *env = SDL_environment; diff --git a/src/stdlib/SDL_getenv_c.h b/src/stdlib/SDL_getenv_c.h new file mode 100644 index 000000000..f1be3d334 --- /dev/null +++ b/src/stdlib/SDL_getenv_c.h @@ -0,0 +1,24 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2024 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "SDL_internal.h" + +extern bool SDL_InitEnvironment(void); +extern void SDL_QuitEnvironment(void);