#include "src/include/pmix_config.h"
#include <stdio.h>
#include <string.h>
#include "src/class/pmix_list.h"
#include "src/include/pmix_globals.h"
#include "src/mca/base/pmix_base.h"
#include "src/mca/base/pmix_mca_base_vari.h"
#include "src/mca/mca.h"
#include "src/util/pmix_keyval_parse.h"
static void save_value(const char *file, int lineno,
const char *name, const char *value);
static char *file_being_read;
static pmix_list_t *_param_list;
int pmix_mca_base_parse_paramfile(const char *paramfile, pmix_list_t *list)
{
file_being_read = (char *) paramfile;
_param_list = list;
return pmix_util_keyval_parse(paramfile, save_value);
}
int pmix_mca_base_internal_env_store(void)
{
return pmix_util_keyval_save_internal_envars(save_value);
}
static void save_value(const char *file, int lineno,
const char *name, const char *value)
{
pmix_mca_base_var_file_value_t *fv;
bool found = false;
PMIX_HIDE_UNUSED_PARAMS(file, lineno);
PMIX_LIST_FOREACH (fv, _param_list, pmix_mca_base_var_file_value_t) {
if (0 == strcmp(name, fv->mbvfv_var)) {
if (NULL != fv->mbvfv_value) {
free(fv->mbvfv_value);
}
found = true;
break;
}
}
if (!found) {
fv = PMIX_NEW(pmix_mca_base_var_file_value_t);
if (NULL == fv) {
return;
}
fv->mbvfv_var = strdup(name);
pmix_list_append(_param_list, &fv->super);
}
fv->mbvfv_value = value ? strdup(value) : NULL;
fv->mbvfv_file = file_being_read;
fv->mbvfv_lineno = pmix_util_keyval_parse_lineno;
}