/*
* 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)
{
return 1;
while (a <= b) {
if (fail && (a >= max))
- return 1;
+ return 2;
CPU_SET_S(a, setsize, set);
a += s;
}
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)
{
fprintf(out, _(
switch (c) {
case 'c':
cmd = CMD_CPU_CONFIGURE;
- if (cpulist_parse(argv[optind - 1], cpu_set, setsize, 1))
- errx(EXIT_FAILURE, _("failed to parse CPU list: %s"),
- argv[optind -1 ]);
+ cpu_parse(argv[optind - 1], cpu_set, setsize);
break;
case 'd':
cmd = CMD_CPU_DISABLE;
- if (cpulist_parse(argv[optind - 1], cpu_set, setsize, 1))
- errx(EXIT_FAILURE, _("failed to parse CPU list: %s"),
- argv[optind -1 ]);
+ cpu_parse(argv[optind - 1], cpu_set, setsize);
break;
case 'e':
cmd = CMD_CPU_ENABLE;
- if (cpulist_parse(argv[optind - 1], cpu_set, setsize, 1))
- errx(EXIT_FAILURE, _("failed to parse CPU list: %s"),
- argv[optind -1 ]);
+ cpu_parse(argv[optind - 1], cpu_set, setsize);
break;
case 'g':
cmd = CMD_CPU_DECONFIGURE;
- if (cpulist_parse(argv[optind - 1], cpu_set, setsize, 1))
- errx(EXIT_FAILURE, _("failed to parse CPU list: %s"),
- argv[optind -1 ]);
+ cpu_parse(argv[optind - 1], cpu_set, setsize);
break;
case 'h':
usage(stdout);