10b57cec5SDimitry Andric /* 2*5ffd83dbSDimitry Andric * kmp_environment.h -- Handle environment variables OS-independently. 30b57cec5SDimitry Andric */ 40b57cec5SDimitry Andric 50b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 60b57cec5SDimitry Andric // 70b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 80b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 90b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 100b57cec5SDimitry Andric // 110b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 120b57cec5SDimitry Andric 130b57cec5SDimitry Andric #ifndef KMP_ENVIRONMENT_H 140b57cec5SDimitry Andric #define KMP_ENVIRONMENT_H 150b57cec5SDimitry Andric 160b57cec5SDimitry Andric #ifdef __cplusplus 170b57cec5SDimitry Andric extern "C" { 180b57cec5SDimitry Andric #endif 190b57cec5SDimitry Andric 200b57cec5SDimitry Andric // Return a copy of the value of environment variable or NULL if the variable 210b57cec5SDimitry Andric // does not exist. 220b57cec5SDimitry Andric // *Note*: Returned pointed *must* be freed after use with __kmp_env_free(). 230b57cec5SDimitry Andric char *__kmp_env_get(char const *name); 240b57cec5SDimitry Andric void __kmp_env_free(char const **value); 250b57cec5SDimitry Andric 260b57cec5SDimitry Andric // Return 1 if the environment variable exists or 0 if does not exist. 270b57cec5SDimitry Andric int __kmp_env_exists(char const *name); 280b57cec5SDimitry Andric 290b57cec5SDimitry Andric // Set the environment variable. 300b57cec5SDimitry Andric void __kmp_env_set(char const *name, char const *value, int overwrite); 310b57cec5SDimitry Andric 320b57cec5SDimitry Andric // Unset (remove) environment variable. 330b57cec5SDimitry Andric void __kmp_env_unset(char const *name); 340b57cec5SDimitry Andric 350b57cec5SDimitry Andric // ----------------------------------------------------------------------------- 360b57cec5SDimitry Andric // Working with environment blocks. 370b57cec5SDimitry Andric 380b57cec5SDimitry Andric /* kmp_env_blk_t is read-only collection of environment variables (or 390b57cec5SDimitry Andric environment-like). Usage: 400b57cec5SDimitry Andric 410b57cec5SDimitry Andric kmp_env_blk_t block; 420b57cec5SDimitry Andric __kmp_env_blk_init( & block, NULL ); // Initialize block from process 430b57cec5SDimitry Andric // environment. 440b57cec5SDimitry Andric // or 450b57cec5SDimitry Andric __kmp_env_blk_init( & block, "KMP_WARNING=1|KMP_AFFINITY=none" ); // from string 460b57cec5SDimitry Andric __kmp_env_blk_sort( & block ); // Optionally, sort list. 470b57cec5SDimitry Andric for ( i = 0; i < block.count; ++ i ) { 480b57cec5SDimitry Andric // Process block.vars[ i ].name and block.vars[ i ].value... 490b57cec5SDimitry Andric } 500b57cec5SDimitry Andric __kmp_env_block_free( & block ); 510b57cec5SDimitry Andric */ 520b57cec5SDimitry Andric 530b57cec5SDimitry Andric struct __kmp_env_var { 540b57cec5SDimitry Andric char *name; 550b57cec5SDimitry Andric char *value; 560b57cec5SDimitry Andric }; 570b57cec5SDimitry Andric typedef struct __kmp_env_var kmp_env_var_t; 580b57cec5SDimitry Andric 590b57cec5SDimitry Andric struct __kmp_env_blk { 600b57cec5SDimitry Andric char *bulk; 610b57cec5SDimitry Andric kmp_env_var_t *vars; 620b57cec5SDimitry Andric int count; 630b57cec5SDimitry Andric }; 640b57cec5SDimitry Andric typedef struct __kmp_env_blk kmp_env_blk_t; 650b57cec5SDimitry Andric 660b57cec5SDimitry Andric void __kmp_env_blk_init(kmp_env_blk_t *block, char const *bulk); 670b57cec5SDimitry Andric void __kmp_env_blk_free(kmp_env_blk_t *block); 680b57cec5SDimitry Andric void __kmp_env_blk_sort(kmp_env_blk_t *block); 690b57cec5SDimitry Andric char const *__kmp_env_blk_var(kmp_env_blk_t *block, char const *name); 700b57cec5SDimitry Andric 710b57cec5SDimitry Andric #ifdef __cplusplus 720b57cec5SDimitry Andric } 730b57cec5SDimitry Andric #endif 740b57cec5SDimitry Andric 750b57cec5SDimitry Andric #endif // KMP_ENVIRONMENT_H 760b57cec5SDimitry Andric 770b57cec5SDimitry Andric // end of file // 78