extern void cpuset_free(cpu_set_t *set);
extern char *cpulist_create(char *str, size_t len, cpu_set_t *set, size_t setsize);
-extern int cpulist_parse(const char *str, cpu_set_t *set, size_t setsize);
+extern int cpulist_parse(const char *str, cpu_set_t *set, size_t setsize, int fail);
extern char *cpumask_create(char *str, size_t len, cpu_set_t *set, size_t setsize);
extern int cpumask_parse(const char *str, cpu_set_t *set, size_t setsize);
/*
* Parses string with CPUs mask.
*/
-int cpulist_parse(const char *str, cpu_set_t *set, size_t setsize)
+int cpulist_parse(const char *str, cpu_set_t *set, size_t setsize, int fail)
{
+ size_t max = cpuset_nbits(setsize);
const char *p, *q;
q = str;
if (!(a <= b))
return 1;
while (a <= b) {
+ if (fail && (a >= max))
+ return 1;
CPU_SET_S(a, setsize, set);
a += s;
}
if (mask)
rc = cpumask_parse(mask, set, setsize);
else
- rc = cpulist_parse(range, set, setsize);
+ rc = cpulist_parse(range, set, setsize, 0);
if (rc)
errx(EXIT_FAILURE, "failed to parse string: %s", mask ? : range);
ts.get_only = 1;
else if (ts.use_list) {
- if (cpulist_parse(argv[optind], new_set, new_setsize))
+ if (cpulist_parse(argv[optind], new_set, new_setsize, 0))
errx(EXIT_FAILURE, _("failed to parse CPU list: %s"),
argv[optind]);
} else if (cpumask_parse(argv[optind], new_set, new_setsize)) {
err(EXIT_FAILURE, _("failed to callocate cpu set"));
if (islist) {
- if (cpulist_parse(buf, set, setsize))
+ if (cpulist_parse(buf, set, setsize, 0))
errx(EXIT_FAILURE, _("failed to parse CPU list %s"), buf);
} else {
if (cpumask_parse(buf, set, setsize))