7#include "nuitka/environment_variables_system.h"
8#include "nuitka/safe_string_ops.h"
12environment_char_t
const *getEnvironmentVariableW(
wchar_t const *name) {
14 wchar_t buffer[32768];
18 DWORD res = GetEnvironmentVariableW(name, buffer, 65536);
20 if (res == 0 || res >
sizeof(buffer)) {
24 return wcsdup(buffer);
27environment_char_t
const *getEnvironmentVariable(
char const *name) {
28 wchar_t name_wide[40];
30 appendStringSafeW(name_wide, name,
sizeof(name_wide) /
sizeof(
wchar_t));
32 return getEnvironmentVariableW(name_wide);
35void setEnvironmentVariable(
char const *name, environment_char_t
const *value) {
37 assert(value != NULL);
39 wchar_t name_wide[40];
41 appendStringSafeW(name_wide, name,
sizeof(name_wide) /
sizeof(
wchar_t));
43 DWORD res = SetEnvironmentVariableW(name_wide, value);
44 assert(wcscmp(getEnvironmentVariable(name), value) == 0);
49void unsetEnvironmentVariable(
char const *name) {
50 wchar_t name_wide[40];
52 appendStringSafeW(name_wide, name,
sizeof(name_wide) /
sizeof(
wchar_t));
54 DWORD res = SetEnvironmentVariableW(name_wide, NULL);
61environment_char_t
const *getEnvironmentVariable(
char const *name) {
return getenv(name); }
63void setEnvironmentVariable(
char const *name, environment_char_t
const *value) { setenv(name, value, 1); }
65void unsetEnvironmentVariable(
char const *name) { unsetenv(name); }
69void setEnvironmentVariableFromLong(
char const *name,
long value) {
71 snprintf(buffer,
sizeof(buffer),
"%ld", value);
76 appendStringSafeW(buffer2, buffer, 128);
78 setEnvironmentVariable(name, buffer2);
80 setEnvironmentVariable(name, buffer);