Be a little smarter when checking the MCA parameters that specify what
components to load: - only allow the ^ to be the first character of the value - if we find ^ elsewhere in the value, print an error and fail This commit was SVN r10880.
Этот коммит содержится в:
родитель
0b15943a7a
Коммит
32c1f38976
@ -35,3 +35,21 @@ The %s component was not found!
|
|||||||
|
|
||||||
This means that this component is either not installed, or unable to be
|
This means that this component is either not installed, or unable to be
|
||||||
used on your system.
|
used on your system.
|
||||||
|
[framework-param:too-many-negates]
|
||||||
|
MCA framework parameters can only take a single negation operator
|
||||||
|
("^"), and it must be at the beginning of the value. The following
|
||||||
|
value violates this rule:
|
||||||
|
|
||||||
|
%s
|
||||||
|
|
||||||
|
When used, the negation operator sets the "exclusive" behavior mode,
|
||||||
|
meaning that it will exclude all specified components (and implicitly
|
||||||
|
include all others). If the negation operator is not specified, the
|
||||||
|
"inclusive" mode is assumed, meaning that all specified components
|
||||||
|
will be included (and implicitly exclude all others).
|
||||||
|
|
||||||
|
For example, "^a,b" specifies the exclusive behavior and means "use
|
||||||
|
all components *except* a and b", while "c,d" specifies the inclusive
|
||||||
|
behavior and means "use *only* components c and d."
|
||||||
|
|
||||||
|
You cannot mix inclusive and exclusive behavior.
|
||||||
|
@ -159,8 +159,7 @@ static int parse_requested(int mca_param, bool *include_mode,
|
|||||||
char ***requested_component_names)
|
char ***requested_component_names)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
char *requested;
|
char *requested, *requested_orig;
|
||||||
char *tmp;
|
|
||||||
|
|
||||||
*requested_component_names = NULL;
|
*requested_component_names = NULL;
|
||||||
*include_mode = true;
|
*include_mode = true;
|
||||||
@ -173,22 +172,39 @@ static int parse_requested(int mca_param, bool *include_mode,
|
|||||||
if (NULL == requested || 0 == strlen(requested)) {
|
if (NULL == requested || 0 == strlen(requested)) {
|
||||||
return OPAL_SUCCESS;
|
return OPAL_SUCCESS;
|
||||||
}
|
}
|
||||||
*requested_component_names = opal_argv_split(requested, ',');
|
requested_orig = requested;
|
||||||
|
|
||||||
/* Are we including or excluding? */
|
/* Are we including or excluding? We only allow the negate
|
||||||
|
character to be the *first* character of the value (but be nice
|
||||||
for (i = 0; NULL != (*requested_component_names)[i]; ++i) {
|
and allow any number of negate characters in the beginning). */
|
||||||
if (negate == *((*requested_component_names)[i])) {
|
|
||||||
tmp = strdup((*requested_component_names)[i] + 1);
|
|
||||||
free((*requested_component_names)[i]);
|
|
||||||
(*requested_component_names)[i] = tmp;
|
|
||||||
|
|
||||||
|
while (negate == requested[0] && '\0' != requested[0]) {
|
||||||
*include_mode = false;
|
*include_mode = false;
|
||||||
|
++requested;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Double check to ensure that the user did not specify the negate
|
||||||
|
character anywhere else in the value. */
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while ('\0' != requested[i]) {
|
||||||
|
if (negate == requested[i]) {
|
||||||
|
opal_show_help("help-mca-base.txt",
|
||||||
|
"framework-param:too-many-negates",
|
||||||
|
true, requested_orig);
|
||||||
|
free(requested_orig);
|
||||||
|
return OPAL_ERROR;
|
||||||
}
|
}
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Split up the value into individual component names */
|
||||||
|
|
||||||
|
*requested_component_names = opal_argv_split(requested, ',');
|
||||||
|
|
||||||
/* All done */
|
/* All done */
|
||||||
|
|
||||||
|
free(requested_orig);
|
||||||
return OPAL_SUCCESS;
|
return OPAL_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user