mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-31 22:25:38 -04:00
spa: fixes for dereferencing pointer to incomplete type in __typeof__
before gcc 10 its not supporting pointer dereferencing in __typeof__.
so made changes according to that. Fixes #3375
clang also defines __GNUC__ and resolves '4' along with __clang__ which
resolves '1'. On any version of clang, __GNUC__ and resolves '4'.
anyway clang has this feature since version 3.
This commit is contained in:
parent
3a8894d2a4
commit
c6c3259a08
1 changed files with 16 additions and 0 deletions
|
|
@ -40,13 +40,20 @@ __extension__ ({ \
|
|||
_old_value; \
|
||||
})
|
||||
|
||||
#if __GNUC__ > 10 || defined(__clang__)
|
||||
#define spa_steal_ptr(ptr) ((__typeof__(*(ptr)) *) spa_exchange((ptr), NULL))
|
||||
#else
|
||||
#define spa_steal_ptr(ptr) ((__typeof__(ptr)) spa_exchange((ptr), NULL))
|
||||
#endif
|
||||
|
||||
#define spa_steal_fd(fd) spa_exchange((fd), -1)
|
||||
|
||||
/* ========================================================================== */
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
|
||||
#if __GNUC__ > 10 || defined(__clang__)
|
||||
#define spa_clear_ptr(ptr, destructor) \
|
||||
__extension__ ({ \
|
||||
__typeof__(*(ptr)) *_old_value = spa_steal_ptr(ptr); \
|
||||
|
|
@ -54,6 +61,15 @@ __extension__ ({ \
|
|||
destructor(_old_value); \
|
||||
(void) 0; \
|
||||
})
|
||||
#else
|
||||
#define spa_clear_ptr(ptr, destructor) \
|
||||
__extension__ ({ \
|
||||
__typeof__(ptr) _old_value = spa_steal_ptr(ptr); \
|
||||
if (_old_value) \
|
||||
destructor(_old_value); \
|
||||
(void) 0; \
|
||||
})
|
||||
#endif
|
||||
|
||||
static inline void _spa_autofree_cleanup_func(void *p)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue