static int slice_verify(Slice *s) { _cleanup_free_ char *parent = NULL; int r; assert(s); if (UNIT(s)->load_state != UNIT_LOADED) return 0; if (!slice_name_is_valid(UNIT(s)->id)) { log_unit_error(UNIT(s), "Slice name %s is not valid. Refusing.", UNIT(s)->id); return -EINVAL; } r = slice_build_parent_slice(UNIT(s)->id, &parent); if (r < 0) return log_unit_error_errno(UNIT(s), r, "Failed to determine parent slice: %m"); if (parent ? !unit_has_name(UNIT_DEREF(UNIT(s)->slice), parent) : UNIT_ISSET(UNIT(s)->slice)) { log_unit_error(UNIT(s), "Located outside of parent slice. Refusing."); return -EINVAL; } return 0; }
static void test_build_parent_slice_one(const char *name, const char *expect, int ret) { _cleanup_free_ char *s = NULL; assert_se(slice_build_parent_slice(name, &s) == ret); assert_se(streq_ptr(s, expect)); }