From: Alejandro Colomar Date: Sat, 15 Nov 2025 19:42:21 +0000 (+0100) Subject: lib/{alloc,search}/: Use typeas() to add support for arbitrary types X-Git-Tag: 4.19.0-rc1~37 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2f18e7c0b674a2b4005a2837322f90a4cf54aab5;p=thirdparty%2Fshadow.git lib/{alloc,search}/: Use typeas() to add support for arbitrary types Signed-off-by: Alejandro Colomar --- diff --git a/lib/alloc/calloc.h b/lib/alloc/calloc.h index 82aec97bc..5f26bf64d 100644 --- a/lib/alloc/calloc.h +++ b/lib/alloc/calloc.h @@ -11,9 +11,11 @@ #include #include "exit_if_null.h" +#include "sizeof.h" -#define CALLOC(n, T) \ +#define CALLOC(n, T) CALLOC_(n, typeas(T)) +#define CALLOC_(n, T) \ ( \ (T *) calloc(n, sizeof(T)) \ ) diff --git a/lib/alloc/malloc.h b/lib/alloc/malloc.h index b7e4a9453..d43f2f995 100644 --- a/lib/alloc/malloc.h +++ b/lib/alloc/malloc.h @@ -12,9 +12,11 @@ #include "attr.h" #include "exit_if_null.h" +#include "sizeof.h" -#define MALLOC(n, T) \ +#define MALLOC(n, T) MALLOC_(n, typeas(T)) +#define MALLOC_(n, T) \ ( \ (T *) mallocarray(n, sizeof(T)) \ ) diff --git a/lib/alloc/realloc.h b/lib/alloc/realloc.h index 0ac158c73..c5e8cdb29 100644 --- a/lib/alloc/realloc.h +++ b/lib/alloc/realloc.h @@ -11,9 +11,11 @@ #include #include "exit_if_null.h" +#include "sizeof.h" -#define REALLOC(p, n, T) \ +#define REALLOC(p, n, T) REALLOC_(p, n, typeas(T)) +#define REALLOC_(p, n, T) \ ( \ _Generic(p, T *: (T *) reallocarray(p, (n) ?: 1, sizeof(T))) \ ) diff --git a/lib/alloc/reallocf.h b/lib/alloc/reallocf.h index dede23f58..efc687097 100644 --- a/lib/alloc/reallocf.h +++ b/lib/alloc/reallocf.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar +// SPDX-FileCopyrightText: 2023-2025, Alejandro Colomar // SPDX-License-Identifier: BSD-3-Clause @@ -12,9 +12,11 @@ #include #include "attr.h" +#include "sizeof.h" -#define REALLOCF(p, n, T) \ +#define REALLOCF(p, n, T) REALLOCF_(p, n, typeas(T)) +#define REALLOCF_(p, n, T) \ ( \ _Generic(p, T *: (T *) reallocarrayf(p, (n) ?: 1, sizeof(T))) \ ) diff --git a/lib/search/l/lfind.h b/lib/search/l/lfind.h index 2206b1551..8e8676702 100644 --- a/lib/search/l/lfind.h +++ b/lib/search/l/lfind.h @@ -12,10 +12,12 @@ #include #include "search/cmp/cmp.h" +#include "sizeof.h" // lfind_T - linear find type-safe -#define lfind_T(T, k, a, n, cmp) \ +#define lfind_T(T, ...) lfind_T_(typeas(T), __VA_ARGS__) +#define lfind_T_(T, k, a, n, cmp) \ ({ \ _Generic(k, T *: 0, const T *: 0); \ _Generic(a, T *: 0, const T *: 0); \ diff --git a/lib/search/l/lsearch.h b/lib/search/l/lsearch.h index 37c677378..51d2715f9 100644 --- a/lib/search/l/lsearch.h +++ b/lib/search/l/lsearch.h @@ -11,10 +11,12 @@ #include #include "search/cmp/cmp.h" +#include "sizeof.h" // lsearch_T - linear search-and-insert type-safe -#define lsearch_T(T, k, a, n, cmp) \ +#define lsearch_T(T, ...) lsearch_T_(typeas(T), __VA_ARGS__) +#define lsearch_T_(T, k, a, n, cmp) \ ({ \ _Generic(k, T *: 0, const T *: 0); \ _Generic(a, T *: 0); \ diff --git a/lib/search/sort/qsort.h b/lib/search/sort/qsort.h index ada38a6f5..471fdec86 100644 --- a/lib/search/sort/qsort.h +++ b/lib/search/sort/qsort.h @@ -11,10 +11,12 @@ #include #include "search/cmp/cmp.h" +#include "sizeof.h" // qsort_T - sort type-safe -#define qsort_T(T, a, n, cmp) do \ +#define qsort_T(T, ...) qsort_T_(typeas(T), __VA_ARGS__) +#define qsort_T_(T, a, n, cmp) do \ { \ _Generic(a, T *: 0); \ qsort(a, n, sizeof(T), cmp); \