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