From a0b07b8c06d2562196837c5411922f6d29996d09 Mon Sep 17 00:00:00 2001
From: Mathieu Faverge <mathieu.faverge@inria.fr>
Date: Thu, 19 May 2022 15:30:19 +0200
Subject: [PATCH] Add functionnalities to play with environement variables

---
 control/auxiliary.h | 82 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 82 insertions(+)

diff --git a/control/auxiliary.h b/control/auxiliary.h
index 45df77d6a..f335bb362 100644
--- a/control/auxiliary.h
+++ b/control/auxiliary.h
@@ -31,6 +31,88 @@
 extern "C" {
 #endif
 
+/*
+ * Get environment variable
+ */
+#if defined(CHAMELEON_OS_WINDOWS)
+
+static inline int
+chameleon_setenv( const char *var, const char *value, int overwrite ) {
+    return !(SetEnvironmentVariable( var, value ));
+}
+
+static inline char *
+chameleon_getenv( const char *var ) {
+    char *str;
+    int len = 512;
+    int rc;
+    str = (char*)malloc(len * sizeof(char));
+    rc = GetEnvironmentVariable(var, str, len);
+    if (rc == 0) {
+        free(str);
+        str = NULL;
+    }
+    return str;
+}
+
+static inline void
+chameleon_cleanenv( char *str ) {
+    if (str != NULL) free(str);
+}
+
+#else /* Other OS systems */
+
+static inline int
+chameleon_setenv( const char *var, const char *value, int overwrite ) {
+    return setenv( var, value, overwrite );
+}
+
+static inline char *
+chameleon_getenv( const char *var ) {
+    return getenv( var );
+}
+
+static inline void
+chameleon_cleanenv( char *str ) {
+    (void)str;
+}
+
+#endif
+
+
+static inline int
+chameleon_env_is_set_to(char * str, char * value) {
+    char * val;
+    if ( (val = chameleon_getenv(str)) &&
+         !strcmp(val, value))
+        return 1;
+    return 0;
+}
+
+static inline int
+chameleon_env_is_on(char * str) {
+    return chameleon_env_is_set_to(str, "1");
+}
+
+static inline int
+chameleon_env_is_off(char * str) {
+    return chameleon_env_is_set_to(str, "0");
+}
+
+static inline int
+chameleon_getenv_get_value_int(char * string, int default_value) {
+    long int ret;
+    char *str = chameleon_getenv(string);
+    if (str == NULL) return default_value;
+
+    if ( sscanf( str, "%ld", &ret ) != 1 ) {
+        perror("sscanf");
+        return default_value;
+    }
+
+    return (int)ret;
+}
+
 /**
  *  Internal routines
  */
-- 
GitLab