1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2025-08-27 21:50:15 +03:00

shared/cpu-set-util: only force range printing one time

The idea is to have at least one range to make the new format clearly
distinguishable from the old. But it is enough to just do it once.
In particular, in case the affinity would be specified like 0, 2, 4, 6…,
this gives much shorter output.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek
2019-05-29 10:17:43 +02:00
parent a047f4f10e
commit 1f57a176af
2 changed files with 12 additions and 5 deletions

View File

@ -55,7 +55,10 @@ char *cpu_set_to_range_string(const CPUSet *set) {
if (!GREEDY_REALLOC(str, allocated, len + 2 + 2 * DECIMAL_STR_MAX(unsigned)))
return NULL;
r = sprintf(str + len, len > 0 ? " %d-%d" : "%d-%d", range_start, range_end);
if (range_end > range_start || len == 0)
r = sprintf(str + len, len > 0 ? " %d-%d" : "%d-%d", range_start, range_end);
else
r = sprintf(str + len, len > 0 ? " %d" : "%d", range_start);
assert_se(r > 0);
len += r;
}
@ -64,7 +67,10 @@ char *cpu_set_to_range_string(const CPUSet *set) {
if (!GREEDY_REALLOC(str, allocated, len + 2 + 2 * DECIMAL_STR_MAX(int)))
return NULL;
r = sprintf(str + len, len > 0 ? " %d-%d" : "%d-%d", range_start, range_end);
if (range_end > range_start || len == 0)
r = sprintf(str + len, len > 0 ? " %d-%d" : "%d-%d", range_start, range_end);
else
r = sprintf(str + len, len > 0 ? " %d" : "%d", range_start);
assert_se(r > 0);
}

View File

@ -29,19 +29,20 @@ static void test_parse_cpu_set(void) {
cpu_set_reset(&c);
/* Simple range (from CPUAffinity example) */
assert_se(parse_cpu_set_full("1 2", &c, true, NULL, "fake", 1, "CPUAffinity") >= 0);
assert_se(parse_cpu_set_full("1 2 4", &c, true, NULL, "fake", 1, "CPUAffinity") >= 0);
assert_se(c.set);
assert_se(c.allocated >= sizeof(__cpu_mask) / 8);
assert_se(CPU_ISSET_S(1, c.allocated, c.set));
assert_se(CPU_ISSET_S(2, c.allocated, c.set));
assert_se(CPU_COUNT_S(c.allocated, c.set) == 2);
assert_se(CPU_ISSET_S(4, c.allocated, c.set));
assert_se(CPU_COUNT_S(c.allocated, c.set) == 3);
assert_se(str = cpu_set_to_string(&c));
log_info("cpu_set_to_string: %s", str);
str = mfree(str);
assert_se(str = cpu_set_to_range_string(&c));
log_info("cpu_set_to_range_string: %s", str);
assert_se(streq(str, "1-2"));
assert_se(streq(str, "1-2 4"));
str = mfree(str);
cpu_set_reset(&c);