diff options
author | Christian Brauner <brauner@kernel.org> | 2025-07-11 15:47:48 +0200 |
---|---|---|
committer | Christian Brauner <brauner@kernel.org> | 2025-07-11 16:01:07 +0200 |
commit | 5c21c5f22d0701ac6c1cafc0e8de4bf42e5c53e5 (patch) | |
tree | cf641185351a12a3dce4595fe4a77c572aada9ab | |
parent | a6ed5691b2428cc578908ee050d5d4908a6e065e (diff) |
cleanup: add a scoped version of CLASS()
This will make it possible to use:
scoped_class() {
}
constructs to limit variables to certain scopes and still perform
auto-cleanup.
Signed-off-by: Christian Brauner <brauner@kernel.org>
-rw-r--r-- | include/linux/cleanup.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/include/linux/cleanup.h b/include/linux/cleanup.h index 7093e1d08af0..bee606bebaca 100644 --- a/include/linux/cleanup.h +++ b/include/linux/cleanup.h @@ -277,6 +277,14 @@ static inline class_##_name##_t class_##_name##ext##_constructor(_init_args) \ class_##_name##_t var __cleanup(class_##_name##_destructor) = \ class_##_name##_constructor +#define scoped_class(_name, var, args) \ + for (CLASS(_name, var)(args); \ + __guard_ptr(_name)(&var) || !__is_cond_ptr(_name); \ + ({ goto _label; })) \ + if (0) { \ +_label: \ + break; \ + } else /* * DEFINE_GUARD(name, type, lock, unlock): |