]> git.ipfire.org Git - thirdparty/shadow.git/commitdiff
lib/{alloc,search}/: Use typeas() to add support for arbitrary types
authorAlejandro Colomar <alx@kernel.org>
Sat, 15 Nov 2025 19:42:21 +0000 (20:42 +0100)
committerSerge Hallyn <serge@hallyn.com>
Fri, 5 Dec 2025 14:34:32 +0000 (08:34 -0600)
Signed-off-by: Alejandro Colomar <alx@kernel.org>
lib/alloc/calloc.h
lib/alloc/malloc.h
lib/alloc/realloc.h
lib/alloc/reallocf.h
lib/search/l/lfind.h
lib/search/l/lsearch.h
lib/search/sort/qsort.h

index 82aec97bcef0c8c8bab2069e729047ca18fc7578..5f26bf64d79a9748b7cbab0baaa86cb64b64d024 100644 (file)
 #include <stdlib.h>
 
 #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))                                    \
 )
index b7e4a9453149a581f1a0628eeb36d98776cd52de..d43f2f99525f4de8daad805de713589ef9603d70 100644 (file)
 
 #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))                               \
 )
index 0ac158c73e5eb3d60b0003eb726d7f4e90a2b9c3..c5e8cdb2901fd95bf9e3af668931b2b5545d36f8 100644 (file)
 #include <stdlib.h>
 
 #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)))  \
 )
index dede23f585af93e1b0295b6fc026f4c1e533a5c7..efc6870974fe9dbb6bbcb73ac21bec116cfa1aec 100644 (file)
@@ -1,4 +1,4 @@
-// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
+// SPDX-FileCopyrightText: 2023-2025, Alejandro Colomar <alx@kernel.org>
 // SPDX-License-Identifier: BSD-3-Clause
 
 
 #include <stdlib.h>
 
 #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))) \
 )
index 2206b1551eaea1d60971e1b9a331108f5e666c2f..8e8676702483530433727c9622f4d6348dad8ab1 100644 (file)
 #include <stddef.h>
 
 #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);                            \
index 37c677378d32156649ac73bace81a23dfc2f151d..51d2715f91122ad4c97d9a6feb0b886e9ffef80e 100644 (file)
 #include <search.h>
 
 #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);                                          \
index ada38a6f5c6018fb6847b173e9846e9f9823b9d8..471fdec8609e99084c7ef0c101d801c1540a36b7 100644 (file)
 #include <stdlib.h>
 
 #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);                                  \