static pmix_status_t setup_app(char *nspace, pmix_list_t *ilist) { uint64_t unique_key[2]; char *string_key, *cs_env; int fd_rand; size_t bytes_read; pmix_kval_t *kv; /* put the number here - or else create an appropriate string. this just needs to * eventually be a string variable */ if(-1 == (fd_rand = open("/dev/urandom", O_RDONLY))) { transports_use_rand(unique_key); } else { bytes_read = read(fd_rand, (char *) unique_key, 16); if(bytes_read != 16) { transports_use_rand(unique_key); } close(fd_rand); } if (NULL == (string_key = transports_print(unique_key))) { PMIX_ERROR_LOG(PMIX_ERR_OUT_OF_RESOURCE); return PMIX_ERR_OUT_OF_RESOURCE; } if (PMIX_SUCCESS != pmix_mca_base_var_env_name("pmix_precondition_transports", &cs_env)) { PMIX_ERROR_LOG(PMIX_ERR_OUT_OF_RESOURCE); free(string_key); return PMIX_ERR_OUT_OF_RESOURCE; } kv = PMIX_NEW(pmix_kval_t); if (NULL == kv) { free(string_key); free(cs_env); return PMIX_ERR_OUT_OF_RESOURCE; } kv->key = strdup(PMIX_SET_ENVAR); kv->value = (pmix_value_t*)malloc(sizeof(pmix_value_t)); if (NULL == kv->value) { free(string_key); free(cs_env); PMIX_RELEASE(kv); return PMIX_ERR_OUT_OF_RESOURCE; } kv->value->type = PMIX_STRING; if (0 > asprintf(&kv->value->data.string, "%s=%s", cs_env, string_key)) { free(string_key); free(cs_env); PMIX_RELEASE(kv); return PMIX_ERR_OUT_OF_RESOURCE; } pmix_list_append(ilist, &kv->super); free(cs_env); free(string_key); return PMIX_SUCCESS; }
static void add_to_env(char **params, char **values, char ***env) { int i; char *name; /* Loop through all the args that we've gotten and make env vars of the form PMIX_MCA_PREFIX*=value. */ for (i = 0; NULL != params && NULL != params[i]; ++i) { (void) pmix_mca_base_var_env_name (params[i], &name); pmix_setenv(name, values[i], true, env); free(name); } }