mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-02-09 13:10:39 +01:00
shared: fix type shenanigans for data pointer of nm_memdup_maybe_a()
The type of the "data" pointer may not be compatible with the type of
the "to_free" / output pointer. This is due to constness, and that we
are unable in C to remove constness from a type.
For example,
{
const char *const *data = ...;
gs_free const char **cpy_to_free = NULL;
const char **cpy;
cpy = nm_memdup_maybe_a (300, data, NM_PTRARRAY_LEN (data) + 1, &cpy_to_free);
}
is prefectly valid , but would not have compiled.
It shows that "data" is not of type "*(&cpy_to_free)", but rather
it might be a non-const pointer of the same type.
Fixes: d0e1d0e626 ('shared: propagate types in nm_malloc_maybe_a(), nm_malloc0_maybe_a(), nm_memdup_maybe_a()')
This commit is contained in:
parent
98f4122673
commit
fbddd27e73
1 changed files with 2 additions and 3 deletions
|
|
@ -1574,14 +1574,13 @@ nm_memdup (gconstpointer data, gsize size)
|
|||
({ \
|
||||
const gsize _size = (size); \
|
||||
typeof (to_free) _to_free_md = (to_free); \
|
||||
typeof (*(_to_free_md)) _data = (data); \
|
||||
typeof (*(_to_free_md)) _ptr_md = NULL; \
|
||||
typeof (*_to_free_md) _ptr_md = NULL; \
|
||||
\
|
||||
nm_assert (_to_free_md && !*_to_free_md); \
|
||||
\
|
||||
if (_size > 0u) { \
|
||||
_ptr_md = nm_malloc_maybe_a ((alloca_maxlen), _size, _to_free_md); \
|
||||
memcpy (_ptr_md, _data, _size); \
|
||||
memcpy (_ptr_md, (data), _size); \
|
||||
} \
|
||||
\
|
||||
_ptr_md; \
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue