chcpu,cpuset: reduce code duplication for cpu list parsing
Reduce code duplication and print better error message if an unsupported cpu number was passed. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
This commit is contained in:
parent
f27ce0711c
commit
59fb133a02
|
@ -263,6 +263,11 @@ int cpumask_parse(const char *str, cpu_set_t *set, size_t setsize)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Parses string with list of CPU ranges.
|
* Parses string with list of CPU ranges.
|
||||||
|
* Returns 0 on success.
|
||||||
|
* Returns 1 on error.
|
||||||
|
* Returns 2 if fail is set and a cpu number passed in the list doesn't fit
|
||||||
|
* into the cpu_set. If fail is not set cpu numbers that do not fit are
|
||||||
|
* ignored and 0 is returned instead.
|
||||||
*/
|
*/
|
||||||
int cpulist_parse(const char *str, cpu_set_t *set, size_t setsize, int fail)
|
int cpulist_parse(const char *str, cpu_set_t *set, size_t setsize, int fail)
|
||||||
{
|
{
|
||||||
|
@ -303,7 +308,7 @@ int cpulist_parse(const char *str, cpu_set_t *set, size_t setsize, int fail)
|
||||||
return 1;
|
return 1;
|
||||||
while (a <= b) {
|
while (a <= b) {
|
||||||
if (fail && (a >= max))
|
if (fail && (a >= max))
|
||||||
return 1;
|
return 2;
|
||||||
CPU_SET_S(a, setsize, set);
|
CPU_SET_S(a, setsize, set);
|
||||||
a += s;
|
a += s;
|
||||||
}
|
}
|
||||||
|
|
|
@ -210,6 +210,18 @@ static int cpu_configure(cpu_set_t *cpu_set, size_t setsize, int configure)
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void cpu_parse(char *cpu_string, cpu_set_t *cpu_set, size_t setsize)
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
rc = cpulist_parse(cpu_string, cpu_set, setsize, 1);
|
||||||
|
if (rc == 0)
|
||||||
|
return;
|
||||||
|
if (rc == 2)
|
||||||
|
errx(EXIT_FAILURE, _("invalid CPU number in CPU list: %s"), cpu_string);
|
||||||
|
errx(EXIT_FAILURE, _("failed to parse CPU list: %s"), cpu_string);
|
||||||
|
}
|
||||||
|
|
||||||
static void __attribute__((__noreturn__)) usage(FILE *out)
|
static void __attribute__((__noreturn__)) usage(FILE *out)
|
||||||
{
|
{
|
||||||
fprintf(out, _(
|
fprintf(out, _(
|
||||||
|
@ -269,27 +281,19 @@ int main(int argc, char *argv[])
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case 'c':
|
case 'c':
|
||||||
cmd = CMD_CPU_CONFIGURE;
|
cmd = CMD_CPU_CONFIGURE;
|
||||||
if (cpulist_parse(argv[optind - 1], cpu_set, setsize, 1))
|
cpu_parse(argv[optind - 1], cpu_set, setsize);
|
||||||
errx(EXIT_FAILURE, _("failed to parse CPU list: %s"),
|
|
||||||
argv[optind -1 ]);
|
|
||||||
break;
|
break;
|
||||||
case 'd':
|
case 'd':
|
||||||
cmd = CMD_CPU_DISABLE;
|
cmd = CMD_CPU_DISABLE;
|
||||||
if (cpulist_parse(argv[optind - 1], cpu_set, setsize, 1))
|
cpu_parse(argv[optind - 1], cpu_set, setsize);
|
||||||
errx(EXIT_FAILURE, _("failed to parse CPU list: %s"),
|
|
||||||
argv[optind -1 ]);
|
|
||||||
break;
|
break;
|
||||||
case 'e':
|
case 'e':
|
||||||
cmd = CMD_CPU_ENABLE;
|
cmd = CMD_CPU_ENABLE;
|
||||||
if (cpulist_parse(argv[optind - 1], cpu_set, setsize, 1))
|
cpu_parse(argv[optind - 1], cpu_set, setsize);
|
||||||
errx(EXIT_FAILURE, _("failed to parse CPU list: %s"),
|
|
||||||
argv[optind -1 ]);
|
|
||||||
break;
|
break;
|
||||||
case 'g':
|
case 'g':
|
||||||
cmd = CMD_CPU_DECONFIGURE;
|
cmd = CMD_CPU_DECONFIGURE;
|
||||||
if (cpulist_parse(argv[optind - 1], cpu_set, setsize, 1))
|
cpu_parse(argv[optind - 1], cpu_set, setsize);
|
||||||
errx(EXIT_FAILURE, _("failed to parse CPU list: %s"),
|
|
||||||
argv[optind -1 ]);
|
|
||||||
break;
|
break;
|
||||||
case 'h':
|
case 'h':
|
||||||
usage(stdout);
|
usage(stdout);
|
||||||
|
|
Loading…
Reference in New Issue