From e298e1950b1b0540ba9eedce143efd153ac6905f Mon Sep 17 00:00:00 2001 From: pantonshire Date: Sun, 16 Aug 2026 11:23:05 +0100 Subject: [PATCH] remove type param from SCOPED macro --- include/public/eventloop.h | 2 +- include/public/io.h | 2 +- include/public/mem.h | 2 +- include/public/scoped.h | 5 ++++- include/public/str.h | 6 +++++- 5 files changed, 12 insertions(+), 5 deletions(-) diff --git a/include/public/eventloop.h b/include/public/eventloop.h index a267dc0..afbffdf 100644 --- a/include/public/eventloop.h +++ b/include/public/eventloop.h @@ -51,5 +51,5 @@ int tlsl_eventloop_add_fd(struct tlsl_eventloop *el, struct tlsl_event *e, int f DEF_SCOPED_TYPE(eventloop_stack, struct tlsl_eventloop, (struct tlsl_eventloop) { .valid = false }, tlsl_eventloop_cleanup) -#define EVENTLOOP_STACK_SCOPED(VAL) SCOPED(eventloop_stack, struct tlsl_eventloop, VAL) +#define EVENTLOOP_STACK_SCOPED(VAL) SCOPED(eventloop_stack, VAL) #define EVENTLOOP_STACK_CLOSE(EL) _tlsl_scoped_eventloop_stack_cleanup(EL) diff --git a/include/public/io.h b/include/public/io.h index d1939d7..9085150 100644 --- a/include/public/io.h +++ b/include/public/io.h @@ -16,7 +16,7 @@ static inline void _tlsl_close_if_nonnegative(int *fd) { DEF_SCOPED_TYPE(fd, int, -1, _tlsl_close_if_nonnegative) -#define FD_SCOPED(VAL) SCOPED(fd, int, VAL) +#define FD_SCOPED(VAL) SCOPED(fd, VAL) #define FD_CLOSE(FD) _tlsl_scoped_fd_cleanup(FD) #define FD_RELEASE(FD) _tlsl_scoped_fd_release(FD) diff --git a/include/public/mem.h b/include/public/mem.h index 08af9bb..d1d4c20 100644 --- a/include/public/mem.h +++ b/include/public/mem.h @@ -15,6 +15,6 @@ static inline void _tlsl_mem_free(void **p) { DEF_SCOPED_TYPE(mem, void *, NULL, _tlsl_mem_free) -#define MEM_SCOPED(TYPE, VAL) SCOPED(mem, TYPE *, VAL) +#define MEM_SCOPED(TYPE, VAL) SCOPED_T(mem, TYPE *, VAL) #define MEM_FREE(TYPE, MEM) ({ TLSL_CHECK_TYPE(TYPE **, MEM), (TYPE *)_scoped_mem_cleanup((void **)(MEM)); }) #define MEM_RELEASE(TYPE, MEM) ({ TLSL_CHECK_TYPE(TYPE **, MEM), (TYPE *)_scoped_mem_release((void **)(MEM)); }) diff --git a/include/public/scoped.h b/include/public/scoped.h index 210c1ae..b12b7e8 100644 --- a/include/public/scoped.h +++ b/include/public/scoped.h @@ -5,6 +5,7 @@ #pragma once #define DEF_SCOPED_TYPE(NAME, TYPE, UNOCCUPIED, CLEANUP_FN) \ + typedef TYPE _tlsl_scoped_##NAME##_t; \ static inline TYPE _tlsl_scoped_##NAME##_unoccupied(void) { \ return (UNOCCUPIED); \ } \ @@ -21,6 +22,8 @@ return _released; \ } -#define SCOPED(NAME, TYPE, VAL) \ +#define SCOPED_T(NAME, TYPE, VAL) \ TYPE VAL __attribute__((cleanup(_tlsl_scoped_##NAME##_cleanup_raw))) \ = _tlsl_scoped_##NAME##_unoccupied() + +#define SCOPED(NAME, VAL) SCOPED_T(NAME, _tlsl_scoped_##NAME##_t, VAL) diff --git a/include/public/str.h b/include/public/str.h index a130cbc..91a113c 100644 --- a/include/public/str.h +++ b/include/public/str.h @@ -8,10 +8,11 @@ #include #include +#include "scoped.h" + #define SVIEW_LIT(S) ((void)(S "LITERAL_CHECK"), (str_view_t) { S, sizeof(S) - 1 }) #define SVIEW_NULL ((str_view_t) { NULL, 0 }) #define SBUF_NULL ((str_buf_t) { NULL, 0 }) -#define SBUF_SCOPED(NAME) str_buf_t NAME __attribute__((cleanup(sb_free))) = SB_NULL #define SVIEW_PRI "%.*s" #define SVIEW_PRI_ARGS(S) (int)((S).len), (S).ptr @@ -90,3 +91,6 @@ static inline void sbuf_free(str_buf_t *buf) { buf->ptr = NULL; buf->len = 0; } + +DEF_SCOPED_TYPE(str_buf, str_buf_t, SBUF_NULL, sbuf_free) +#define SBUF_SCOPED(VAL) SCOPED(str_buf, VAL)