remove type param from SCOPED macro

main
pantonshire 1 month ago
parent ed6d2d1cd5
commit e298e1950b

@ -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) 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) #define EVENTLOOP_STACK_CLOSE(EL) _tlsl_scoped_eventloop_stack_cleanup(EL)

@ -16,7 +16,7 @@ static inline void _tlsl_close_if_nonnegative(int *fd) {
DEF_SCOPED_TYPE(fd, int, -1, _tlsl_close_if_nonnegative) 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_CLOSE(FD) _tlsl_scoped_fd_cleanup(FD)
#define FD_RELEASE(FD) _tlsl_scoped_fd_release(FD) #define FD_RELEASE(FD) _tlsl_scoped_fd_release(FD)

@ -15,6 +15,6 @@ static inline void _tlsl_mem_free(void **p) {
DEF_SCOPED_TYPE(mem, void *, NULL, _tlsl_mem_free) 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_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)); }) #define MEM_RELEASE(TYPE, MEM) ({ TLSL_CHECK_TYPE(TYPE **, MEM), (TYPE *)_scoped_mem_release((void **)(MEM)); })

@ -5,6 +5,7 @@
#pragma once #pragma once
#define DEF_SCOPED_TYPE(NAME, TYPE, UNOCCUPIED, CLEANUP_FN) \ #define DEF_SCOPED_TYPE(NAME, TYPE, UNOCCUPIED, CLEANUP_FN) \
typedef TYPE _tlsl_scoped_##NAME##_t; \
static inline TYPE _tlsl_scoped_##NAME##_unoccupied(void) { \ static inline TYPE _tlsl_scoped_##NAME##_unoccupied(void) { \
return (UNOCCUPIED); \ return (UNOCCUPIED); \
} \ } \
@ -21,6 +22,8 @@
return _released; \ return _released; \
} }
#define SCOPED(NAME, TYPE, VAL) \ #define SCOPED_T(NAME, TYPE, VAL) \
TYPE VAL __attribute__((cleanup(_tlsl_scoped_##NAME##_cleanup_raw))) \ TYPE VAL __attribute__((cleanup(_tlsl_scoped_##NAME##_cleanup_raw))) \
= _tlsl_scoped_##NAME##_unoccupied() = _tlsl_scoped_##NAME##_unoccupied()
#define SCOPED(NAME, VAL) SCOPED_T(NAME, _tlsl_scoped_##NAME##_t, VAL)

@ -8,10 +8,11 @@
#include <stdbool.h> #include <stdbool.h>
#include <string.h> #include <string.h>
#include "scoped.h"
#define SVIEW_LIT(S) ((void)(S "LITERAL_CHECK"), (str_view_t) { S, sizeof(S) - 1 }) #define SVIEW_LIT(S) ((void)(S "LITERAL_CHECK"), (str_view_t) { S, sizeof(S) - 1 })
#define SVIEW_NULL ((str_view_t) { NULL, 0 }) #define SVIEW_NULL ((str_view_t) { NULL, 0 })
#define SBUF_NULL ((str_buf_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 "%.*s"
#define SVIEW_PRI_ARGS(S) (int)((S).len), (S).ptr #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->ptr = NULL;
buf->len = 0; buf->len = 0;
} }
DEF_SCOPED_TYPE(str_buf, str_buf_t, SBUF_NULL, sbuf_free)
#define SBUF_SCOPED(VAL) SCOPED(str_buf, VAL)

Loading…
Cancel
Save