int action_list_namespaces(void) {
_cleanup_(table_unrefp) Table *table = NULL;
sd_id128_t machine;
- char machine_id[SD_ID128_STRING_MAX];
int r;
assert(arg_action == ACTION_LIST_NAMESPACES);
if (r < 0)
return log_error_errno(r, "Failed to get machine ID: %m");
- sd_id128_to_string(machine, machine_id);
-
table = table_new("namespace");
if (!table)
return log_oom();
}
FOREACH_DIRENT(de, dirp, return log_error_errno(errno, "Failed to iterate through %s: %m", path)) {
- char *dot;
- if (!startswith(de->d_name, machine_id))
+ const char *e = strchr(de->d_name, '.');
+ if (!e)
+ continue;
+
+ _cleanup_free_ char *ids = strndup(de->d_name, e - de->d_name);
+ if (!ids)
+ return log_oom();
+
+ sd_id128_t id;
+ r = sd_id128_from_string(ids, &id);
+ if (r < 0)
continue;
- dot = strchr(de->d_name, '.');
- if (!dot)
+ if (!sd_id128_equal(machine, id))
continue;
- if (!log_namespace_name_valid(dot + 1))
+ e++;
+
+ if (!log_namespace_name_valid(e))
continue;
- r = table_add_cell(table, NULL, TABLE_STRING, dot + 1);
+ r = table_add_cell(table, NULL, TABLE_STRING, e);
if (r < 0)
return table_log_add_error(r);
}