From 637ef481cff70ef03081146c2ae5663e864a0a0c Mon Sep 17 00:00:00 2001 From: Tomoya Fujita Date: Wed, 14 May 2025 13:41:11 -0700 Subject: [PATCH] use getenv_s instead of getenv for Windows. (#499) Signed-off-by: Tomoya Fujita (cherry picked from commit 46ab4d4eeb555a2e9e880157b97f0a867d3a256c) --- src/env.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/env.c b/src/env.c index 3fdeab8d..592f6995 100644 --- a/src/env.c +++ b/src/env.c @@ -81,8 +81,27 @@ rcutils_get_env(const char * env_name, const char ** env_value) return "argument env_value is null"; } - // TODO(Suyash458): getenv is deprecated on Windows; consider using getenv_s instead +#ifdef _WIN32 + size_t requiredSize = 0; + char *buffer = NULL; + if (getenv_s(&requiredSize, NULL, 0, env_name) == 0 && requiredSize > 0) { + buffer = (char *)malloc(requiredSize * sizeof(char)); + if (buffer != NULL) { + if (getenv_s(&requiredSize, buffer, requiredSize, env_name) == 0) { + *env_value = buffer; + } else { + free(buffer); + *env_value = NULL; + } + } else { + *env_value = NULL; + } + } else { + *env_value = NULL; + } +#else *env_value = getenv(env_name); +#endif if (NULL == *env_value) { *env_value = "";