xref: /freebsd-src/contrib/llvm-project/openmp/runtime/src/kmp_environment.h (revision e25152834cdf3b353892835a4f3b157e066a8ed4)
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