⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mca_base_param.c

📁 MPI stands for the Message Passing Interface. Written by the MPI Forum (a large committee comprising
💻 C
📖 第 1 页 / 共 3 页
字号:
        ret = strdup(array[id].mbp_env_var_name);    } else {        len = strlen(mca_prefix) + strlen(type) + 16;        if (NULL != component) {            len += strlen(component);        }        if (NULL != param) {            len += strlen(param);        }        name = (char*)malloc(len);        if (NULL == name) {            return NULL;        }        name[0] = '\0';        snprintf(name, len, "%s%s", mca_prefix, type);        if (NULL != component) {            strcat(name, "_");            strcat(name, component);        }        if (NULL != param) {            strcat(name, "_");            strcat(name, param);        }        ret = name;    }    /* All done */    return ret;}/* * Find the index for an MCA parameter based on its names. */int mca_base_param_find(const char *type_name, const char *component_name,                         const char *param_name) {  size_t i, size;  mca_base_param_t *array;  /* Check for bozo cases */  if (!initialized) {    return OPAL_ERROR;  }  /* Loop through looking for a parameter of a given     type/component/param */  size = opal_value_array_get_size(&mca_base_params);  array = OPAL_VALUE_ARRAY_GET_BASE(&mca_base_params, mca_base_param_t);  for (i = 0; i < size; ++i) {    if (((NULL == type_name && NULL == array[i].mbp_type_name) ||         (NULL != type_name && NULL != array[i].mbp_type_name &&          (0 == strcmp(type_name, array[i].mbp_type_name)))) &&        ((NULL == component_name && NULL == array[i].mbp_component_name) ||         (NULL != component_name && NULL != array[i].mbp_component_name &&          0 == strcmp(component_name, array[i].mbp_component_name))) &&        ((NULL == param_name && NULL == array[i].mbp_param_name) ||         (NULL != param_name && NULL != array[i].mbp_param_name &&          0 == strcmp(param_name, array[i].mbp_param_name)))) {      return (int)i;    }  }  /* Didn't find it */  return OPAL_ERROR;}int mca_base_param_set_internal(int index, bool internal){    size_t len;    mca_base_param_t *array;    /* Check for bozo cases */        if (!initialized) {        return OPAL_ERROR;    }    len = opal_value_array_get_size(&mca_base_params);    if (((size_t) index) > len) {        return OPAL_ERROR;    }    /* We have a valid entry (remember that we never delete MCA       parameters, so if the index is >0 and <len, it must be good),       so save the internal flag */    array = OPAL_VALUE_ARRAY_GET_BASE(&mca_base_params, mca_base_param_t);    array[index].mbp_internal = internal;      /* All done */    return OPAL_SUCCESS;}/* * Return a list of info of all currently registered parameters */int mca_base_param_dump(opal_list_t **info, bool internal){    size_t i, len;    mca_base_param_info_t *p;    mca_base_param_t *array;    /* Check for bozo cases */        if (!initialized) {        return OPAL_ERROR;    }    if (NULL == info) {        return OPAL_ERROR;    }    *info = OBJ_NEW(opal_list_t);    /* Iterate through all the registered parameters */    len = opal_value_array_get_size(&mca_base_params);    array = OPAL_VALUE_ARRAY_GET_BASE(&mca_base_params, mca_base_param_t);    for (i = 0; i < len; ++i) {        if(array[i].mbp_internal == internal || internal) {            p = OBJ_NEW(mca_base_param_info_t);            p->mbpp_index = (int)i;            p->mbpp_type_name = array[i].mbp_type_name;            p->mbpp_component_name = array[i].mbp_component_name;            p->mbpp_param_name = array[i].mbp_param_name;            p->mbpp_full_name = array[i].mbp_full_name;            p->mbpp_read_only = array[i].mbp_read_only;            p->mbpp_type = array[i].mbp_type;            p->mbpp_help_msg = array[i].mbp_help_msg;                        opal_list_append(*info, (opal_list_item_t*) p);        }    }    /* All done */    return OPAL_SUCCESS;}/* * Make an argv-style list of strings suitable for an environment */int mca_base_param_build_env(char ***env, int *num_env, bool internal){    size_t i, len;    mca_base_param_t *array;    char *str;    mca_base_param_storage_t storage;    /* Check for bozo cases */        if (!initialized) {        return OPAL_ERROR;    }    /* Iterate through all the registered parameters */    len = opal_value_array_get_size(&mca_base_params);    array = OPAL_VALUE_ARRAY_GET_BASE(&mca_base_params, mca_base_param_t);    for (i = 0; i < len; ++i) {        /* Don't output read-only values */        if (array[i].mbp_read_only) {            continue;        }        if (array[i].mbp_internal == internal || internal) {            if (param_lookup(i, &storage, NULL)) {                if (MCA_BASE_PARAM_TYPE_INT == array[i].mbp_type) {                    asprintf(&str, "%s=%d", array[i].mbp_env_var_name,                              storage.intval);                    opal_argv_append(num_env, env, str);                    free(str);                } else if (MCA_BASE_PARAM_TYPE_STRING == array[i].mbp_type) {                    if (NULL != storage.stringval) {                        asprintf(&str, "%s=%s", array[i].mbp_env_var_name,                                  storage.stringval);                        free(storage.stringval);                        opal_argv_append(num_env, env, str);                        free(str);                    }                 } else {                    goto cleanup;                }            } else {                goto cleanup;            }        }    }    /* All done */    return OPAL_SUCCESS;    /* Error condition */ cleanup:    if (*num_env > 0) {        opal_argv_free(*env);        *num_env = 0;        *env = NULL;    }    return OPAL_ERR_NOT_FOUND;}/* * Free a list -- and all associated memory -- that was previously * returned from mca_base_param_dump() */int mca_base_param_dump_release(opal_list_t *info){    opal_list_item_t *item;    for (item = opal_list_remove_first(info); NULL != item;         item = opal_list_remove_first(info)) {        OBJ_RELEASE(item);    }    OBJ_RELEASE(info);    return OPAL_SUCCESS;}/* * Shut down the MCA parameter system (normally only invoked by the * MCA framework itself). */int mca_base_param_finalize(void){    opal_list_item_t *item;    mca_base_param_t *array;    if (initialized) {        /* This is slow, but effective :-) */        array = OPAL_VALUE_ARRAY_GET_BASE(&mca_base_params, mca_base_param_t);        while (opal_value_array_get_size(&mca_base_params) > 0) {            OBJ_DESTRUCT(&array[0]);            opal_value_array_remove_item(&mca_base_params, 0);        }        OBJ_DESTRUCT(&mca_base_params);        for (item = opal_list_remove_first(&mca_base_param_file_values);             NULL != item;             item = opal_list_remove_first(&mca_base_param_file_values)) {            OBJ_RELEASE(item);        }        OBJ_DESTRUCT(&mca_base_param_file_values);        initialized = false;    }    /* All done */    return OPAL_SUCCESS;}/*************************************************************************/static int read_files(char *file_list){    int i, count;    char **files;    /* Iterate through all the files passed in -- read them in reverse       order so that we preserve unix/shell path-like semantics (i.e.,       the entries farthest to the left get precedence) */    files = opal_argv_split(file_list, OPAL_ENV_SEP);    count = opal_argv_count(files);    for (i = count - 1; i >= 0; --i) {        mca_base_parse_paramfile(files[i]);    }    opal_argv_free(files);    return OPAL_SUCCESS;}static int param_register(const char *type_name,                          const char *component_name,                          const char *param_name,                          const char *help_msg,                          mca_base_param_type_t type,                          bool internal,                          bool read_only,                          mca_base_param_storage_t *default_value,                          mca_base_param_storage_t *file_value,                          mca_base_param_storage_t *override_value,                          mca_base_param_storage_t *current_value){  int ret;  size_t i, len;  mca_base_param_t param, *array;  /* There are data holes in the param struct */  OMPI_DEBUG_ZERO(param);  /* Initialize the array if it has never been initialized */  if (!initialized) {      mca_base_param_init();  }  /* Create a parameter entry.  If a keyval is to be used, it will be     registered elsewhere.  We simply assign -1 here. */  OBJ_CONSTRUCT(&param, mca_base_param_t);  param.mbp_type = type;  param.mbp_keyval = -1;  param.mbp_internal = internal;  param.mbp_read_only = read_only;  if (NULL != help_msg) {      param.mbp_help_msg = strdup(help_msg);  }  if (NULL != type_name) {      param.mbp_type_name = strdup(type_name);      if (NULL == param.mbp_type_name) {          OBJ_DESTRUCT(&param);          return OPAL_ERR_OUT_OF_RESOURCE;      }  }  if (NULL != component_name) {      param.mbp_component_name = strdup(component_name);      if (NULL == param.mbp_component_name) {          OBJ_DESTRUCT(&param);          return OPAL_ERR_OUT_OF_RESOURCE;      }  }  param.mbp_param_name = NULL;  if (NULL != param_name) {      param.mbp_param_name = strdup(param_name);      if (NULL == param.mbp_param_name) {          OBJ_DESTRUCT(&param);          return OPAL_ERR_OUT_OF_RESOURCE;      }  }  param.mbp_env_var_name = NULL;  len = 16;  if (NULL != type_name) {      len += strlen(type_name);  }  if (NULL != param.mbp_component_name) {      len += strlen(param.mbp_component_name);  }  if (NULL != param.mbp_param_name) {      len += strlen(param.mbp_param_name);  }    param.mbp_full_name = (char*)malloc(len);  if (NULL == param.mbp_full_name) {      OBJ_DESTRUCT(&param);      return OPAL_ERROR;  }    /* Copy the name over in parts */    param.mbp_full_name[0] = '\0';  if (NULL != type_name) {      strncat(param.mbp_full_name, type_name, len);  }  if (NULL != component_name) {      if ('\0' != param.mbp_full_name[0]) {          strcat(param.mbp_full_name, "_");      }      strcat(param.mbp_full_name, component_name);  }  if (NULL != param_name) {      if ('\0' != param.mbp_full_name[0]) {          strcat(param.mbp_full_name, "_");      }      strcat(param.mbp_full_name, param_name);  }  /* Create the environment name */  len = strlen(param.mbp_full_name) + strlen(mca_prefix) + 16;  param.mbp_env_var_name = (char*)malloc(len);  if (NULL == param.mbp_env_var_name) {    OBJ_DESTRUCT(&param);    return OPAL_ERROR;  }  snprintf(param.mbp_env_var_name, len, "%s%s", mca_prefix,            param.mbp_full_name);  /* Figure out the default value; zero it out if a default is not     provided */  if (NULL != default_value) {    if (MCA_BASE_PARAM_TYPE_STRING == param.mbp_type &&        NULL != default_value->stringval) {      param.mbp_default_value.stringval = strdup(default_value->stringval);    } else {      param.mbp_default_value = *default_value;    }  } else {    memset(&param.mbp_default_value, 0, sizeof(param.mbp_default_value));  }  /* Figure out the file value; zero it out if a file is not     provided */  if (NULL != file_value) {    if (MCA_BASE_PARAM_TYPE_STRING == param.mbp_type &&        NULL != file_value->stringval) {      param.mbp_file_value.stringval = strdup(file_value->stringval);    } else {      param.mbp_file_value = *file_value;    }    param.mbp_file_value_set = true;  } else {    memset(&param.mbp_file_value, 0, sizeof(param.mbp_file_value));    param.mbp_file_value_set = false;  }  /* Figure out the override value; zero it out if a override is not     provided */  if (NULL != override_value) {    if (MCA_BASE_PARAM_TYPE_STRING == param.mbp_type &&        NULL != override_value->stringval) {      param.mbp_override_value.stringval = strdup(override_value->stringval);    } else {      param.mbp_override_value = *override_value;    }    param.mbp_override_value_set = true;  } else {    memset(&param.mbp_override_value, 0, sizeof(param.mbp_override_value));    param.mbp_override_value_set = false;  }  /* See if this entry is already in the array */  len = opal_value_array_get_size(&mca_base_params);  array = OPAL_VALUE_ARRAY_GET_BASE(&mca_base_params, mca_base_param_t);  for (i = 0; i < len; ++i) {    if (0 == strcmp(param.mbp_full_name, array[i].mbp_full_name)) {        /* We found an entry with the same param name.  Check to see           if we're changing types */        /* Easy case: both are INT */      if (MCA_BASE_PARAM_TYPE_INT == array[i].mbp_type &&          MCA_BASE_PARAM_TYPE_INT == param.mbp_type) {          if (NULL != default_value) {              array[i].mbp_default_value.intval =                  param.mbp_default_value.intval;          }          if (NULL != file_value) {              array[i].mbp_file_value.intval =                  param.mbp_file_value.intval;              array[i].mbp_file_value_set = true;          }          if (NULL != override_value) {              array[i].mbp_override_value.intval =                  param.mbp_override_value.intval;              array[i].mbp_override_value_set = true;          }      }       /* Both are STRING */      else if (MCA_BASE_PARAM_TYPE_STRING == array[i].mbp_type &&               MCA_BASE_PARAM_TYPE_STRING == param.mbp_type) {          if (NULL != default_value) {              if (NULL != array[i].mbp_default_value.stringval) {                  free(array[i].mbp_default_value.stringval);                  array[i].mbp_default_value.stringval = NULL;              }              if (NULL != param.mbp_default_value.stringval) {                  array[i].mbp_default_value.stringval =                      strdup(param.mbp_default_value.stringval);              }          }          if (NULL != file_value) {              if (NULL != array[i].mbp_file_value.stringval) {                  free(array[i].mbp_file_value.stringval);                  array[i].mbp_file_value.stringval = NULL;              }              if (NULL != param.mbp_file_value.stringval) {                  array[i].mbp_file_value.stringval =                      strdup(param.mbp_file_value.stringval);              }              array[i].mbp_file_value_set = true;          }          if (NULL != override_value) {              if (NULL != array[i].mbp_override_value.stringval) {                  free(array[i].mbp_override_value.stringval);                  array[i].mbp_override_value.stringval = NULL;              }              if (NULL != param.mbp_override_value.stringval) {                  array[i].mbp_override_value.stringval =                      strdup(param.mbp_override_value.stringval);              }              array[i].mbp_override_value_set = true;          }      }       /* Original is INT, new is STRING */      else if (MCA_BASE_PARAM_TYPE_INT == array[i].mbp_type &&

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -