static std::pair get_env_variable_no_log()

in src/environment.h [27:74]


static std::pair<std::string, std::string> get_env_variable_no_log(
    std::string env_variable)
{
    const char* env_value;
    std::stringstream error_message_stream;
#ifdef __LINUX__
    env_value = getenv(env_variable.c_str());
    if (env_value == NULL)
    {
        error_message_stream << "Could not retrieve environment variable for '"
                             << env_variable << "'";
        return std::make_pair(std::string(), error_message_stream.str());
    }
#else
    std::unique_ptr<char[]> env_temp =
        std::make_unique<char[]>(MAX_ENV_VAR_LENGTH);
    if (env_temp == nullptr)
    {
        error_message_stream
            << "Failed to allocate memory for environment varible for '"
            << env_variable << "'";
        return std::make_pair(std::string(), error_message_stream.str());
    }

    env_value = env_temp.get();
    DWORD status = GetEnvironmentVariableA(
        env_variable.c_str(), env_temp.get(), MAX_ENV_VAR_LENGTH);
    if (status == 0)
    {
        error_message_stream << "Could not retrieve environment variable for '"
                             << env_variable << "'";
        return std::make_pair(std::string(), error_message_stream.str());
    }
#endif
    auto length = strnlen(env_value, MAX_ENV_VAR_LENGTH);
    if (length <= 0 || length == MAX_ENV_VAR_LENGTH)
    {
        error_message_stream << "Length of environment variable '"
                             << env_variable << "' ";
        error_message_stream << "is either empty or equal to expected max "
                                "length. ";
        error_message_stream << "Actual length is: " << length << " ";
        error_message_stream << "Max length is " << MAX_ENV_VAR_LENGTH;
        return std::make_pair(std::string(), error_message_stream.str());
    }

    return std::make_pair(env_value, std::string());
}