Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 2 additions & 8 deletions lib/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,8 @@ libshadow_la_SOURCES = \
age.c \
agetpass.c \
agetpass.h \
alloc/calloc.c \
alloc/calloc.h \
alloc/malloc.c \
alloc/malloc.h \
alloc/realloc.c \
alloc/realloc.h \
alloc/reallocf.c \
alloc/reallocf.h \
alloc/alloc.c \
alloc/alloc.h \
atoi/a2i.c \
atoi/a2i.h \
atoi/getnum.c \
Expand Down
2 changes: 1 addition & 1 deletion lib/addgrps.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
#include <string.h>
#include <sys/types.h>

#include "alloc/reallocf.h"
#include "alloc/alloc.h"
#include "io/fprintf.h"
#include "search/l/lsearch.h"
#include "shadow/grp/agetgroups.h"
Expand Down
2 changes: 1 addition & 1 deletion lib/agetpass.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

#ident "$Id$"

#include "alloc/malloc.h"
#include "alloc/alloc.h"

#if WITH_LIBBSD == 0
#include "freezero.h"
Expand Down
12 changes: 12 additions & 0 deletions lib/alloc/alloc.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// SPDX-FileCopyrightText: 2023-2026, Alejandro Colomar <alx@kernel.org>
// SPDX-License-Identifier: BSD-3-Clause


#include "config.h"

#include "alloc/alloc.h"

#include <stddef.h>


extern inline void *reallocarrayf(void *p, size_t nmemb, size_t size);
72 changes: 72 additions & 0 deletions lib/alloc/alloc.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
// SPDX-FileCopyrightText: 2023-2026, Alejandro Colomar <alx@kernel.org>
// SPDX-License-Identifier: BSD-3-Clause


#ifndef SHADOW_INCLUDE_LIB_ALLOC_ALLOC_H_
#define SHADOW_INCLUDE_LIB_ALLOC_ALLOC_H_


#include "config.h"

#include <stddef.h>
#include <stdlib.h>

#include "cast.h"
#include "exit_if_null.h"
#include "sizeof.h"


// malloc_T - malloc type-safe
#define malloc_T(n, T) rvalue((typeas(T) *){mallocarray(n, sizeof(T))})
// calloc_T - calloc type-safe
#define calloc_T(n, T) rvalue((typeas(T) *){calloc(n, sizeof(T))})
// realloc_T - realloc type-safe
#define realloc_T(p, n, T) \
( \
_Generic(p, typeas(T) *: (void)0), \
rvalue((typeas(T) *){reallocarray_(p, n, sizeof(T))}) \
)
// reallocf_T - realloc free-on-error type-safe
#define reallocf_T(p, n, T) \
( \
_Generic(p, typeas(T) *: (void)0), \
rvalue((typeas(T) *){reallocarrayf_(p, n, sizeof(T))}) \
)


// xmalloc_T - exit-on-error malloc type-safe
#define xmalloc_T(n, T) exit_if_null(malloc_T(n, T))
// xcalloc_T - exit-on-error calloc type-safe
#define xcalloc_T(n, T) exit_if_null(calloc_T(n, T))
// xrealloc_T - exit-on-error realloc type-safe
#define xrealloc_T(p, n, T) exit_if_null(realloc_T(p, n, T))


// mallocarray - malloc array
#define mallocarray(...) reallocarray(NULL, __VA_ARGS__)


#define reallocarray_(p, n, size) reallocarray(p, (n) ?: 1, (size) ?: 1)
#define reallocarrayf_(p, n, size) reallocarrayf(p, (n) ?: 1, (size) ?: 1)


// reallocarrayf - realloc array free-on-error
ATTR_ALLOC_SIZE(2, 3)
ATTR_MALLOC(free)
inline void *reallocarrayf(void *p, size_t nmemb, size_t size);


inline void *
reallocarrayf(void *p, size_t nmemb, size_t size)
{
void *q;

q = reallocarray(p, nmemb ?: 1, size ?: 1);

if (q == NULL)
free(p);
return q;
}


#endif // include guard
11 changes: 0 additions & 11 deletions lib/alloc/calloc.c

This file was deleted.

29 changes: 0 additions & 29 deletions lib/alloc/calloc.h

This file was deleted.

16 changes: 0 additions & 16 deletions lib/alloc/malloc.c

This file was deleted.

43 changes: 0 additions & 43 deletions lib/alloc/malloc.h

This file was deleted.

11 changes: 0 additions & 11 deletions lib/alloc/realloc.c

This file was deleted.

32 changes: 0 additions & 32 deletions lib/alloc/realloc.h

This file was deleted.

16 changes: 0 additions & 16 deletions lib/alloc/reallocf.c

This file was deleted.

48 changes: 0 additions & 48 deletions lib/alloc/reallocf.h

This file was deleted.

2 changes: 2 additions & 0 deletions lib/cast.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,7 @@

#define const_cast(T, p) _Generic(p, const T: (T) (p))

#define rvalue(lv) ((void)0, (lv))


#endif // include guard
2 changes: 1 addition & 1 deletion lib/commonio.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
#include <stdlib.h>
#include <utime.h>

#include "alloc/malloc.h"
#include "alloc/alloc.h"
#include "atoi/getnum.h"
#include "commonio.h"
#include "defines.h"
Expand Down
2 changes: 1 addition & 1 deletion lib/copydir.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
#include <stdio.h>
#include <string.h>

#include "alloc/malloc.h"
#include "alloc/alloc.h"
#include "attr.h"
#include "fs/readlink/areadlink.h"
#include "io/fprintf.h"
Expand Down
3 changes: 1 addition & 2 deletions lib/env.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@
#include <stdlib.h>
#include <string.h>

#include "alloc/malloc.h"
#include "alloc/realloc.h"
#include "alloc/alloc.h"
#include "prototypes.h"
#include "defines.h"
#include "shadowlog.h"
Expand Down
2 changes: 1 addition & 1 deletion lib/find_new_gid.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
#include <stdio.h>
#include <errno.h>

#include "alloc/calloc.h"
#include "alloc/alloc.h"
#include "groupio.h"
#include "getdef.h"
#include "io/fprintf.h"
Expand Down
2 changes: 1 addition & 1 deletion lib/find_new_uid.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
#include <stdio.h>
#include <errno.h>

#include "alloc/calloc.h"
#include "alloc/alloc.h"
#include "prototypes.h"
#include "pwio.h"
#include "getdef.h"
Expand Down
2 changes: 1 addition & 1 deletion lib/fs/readlink/areadlink.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
#include <stdlib.h>

#include "defines.h"
#include "alloc/malloc.h"
#include "alloc/alloc.h"
#include "attr.h"
#include "fs/readlink/readlinknul.h"

Expand Down
Loading
Loading