summaryrefslogtreecommitdiffstats
path: root/src/libnetdata/os/setenv.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libnetdata/os/setenv.c')
-rw-r--r--src/libnetdata/os/setenv.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/libnetdata/os/setenv.c b/src/libnetdata/os/setenv.c
new file mode 100644
index 000000000..5aa4302b8
--- /dev/null
+++ b/src/libnetdata/os/setenv.c
@@ -0,0 +1,30 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#include "config.h"
+
+#ifndef HAVE_SETENV
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+int os_setenv(const char *name, const char *value, int overwrite) {
+ char *env_var;
+ int result;
+
+ if (!overwrite) {
+ env_var = getenv(name);
+ if (env_var) return 0; // Already set
+ }
+
+ size_t len = strlen(name) + strlen(value) + 2; // +2 for '=' and '\0'
+ env_var = malloc(len);
+ if (!env_var) return -1; // Allocation failure
+ snprintf(env_var, len, "%s=%s", name, value);
+
+ result = putenv(env_var);
+ // free(env_var); // _putenv in Windows makes a copy of the string
+ return result;
+}
+
+#endif