master
c 43 lines 1.05 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 #include "libnetdata/libnetdata.h"
4
5 #ifndef HAVE_SETENV
6 int os_setenv(const char *name, const char *value, int overwrite) {
7 char *env_var;
8 int result;
9
10 if (!overwrite) {
11 env_var = getenv(name);
12 if (env_var) return 0; // Already set
13 }
14
15 size_t len = strlen(name) + strlen(value) + 2; // +2 for '=' and '\0'
16 env_var = malloc(len);
17 if (!env_var) return -1; // Allocation failure
18 snprintf(env_var, len, "%s=%s", name, value);
19
20 result = putenv(env_var);
21 // free(env_var); // _putenv in Windows makes a copy of the string
22 return result;
23 }
24
25 #endif
26
27 void nd_setenv(const char *name, const char *value, int overwrite) {
28 #if defined(OS_WINDOWS)
29 if(overwrite)
30 SetEnvironmentVariable(name, value);
31 else {
32 char buf[1024];
33 if(GetEnvironmentVariable(name, buf, sizeof(buf)) == 0)
34 SetEnvironmentVariable(name, value);
35 }
36 #endif
37
38 #ifdef HAVE_SETENV
39 setenv(name, value, overwrite);
40 #else
41 os_setenv(name, value, overwite);
42 #endif
43 }