mirror of
https://github.com/strongswan/strongswan.git
synced 2025-10-04 00:00:14 -04:00
object: Fix CALLBACK macros with GCC 12
GCC 12 produces weird code when a callback is called directly (e.g. parse_bool() via parse_option() in vici_config.c). Instead of the actual pointer, it explicitly passes 0 as first argument, which likely causes a segmentation fault. It doesn't happen when called indirectly via function pointer that has void* as first argument, which this patch kinda replicates for direct calls to avoid the issue. Closes strongswan/strongswan#1053
This commit is contained in:
parent
cc1d78b0a8
commit
993ea32825
@ -120,7 +120,7 @@
|
||||
#define CALLBACK(name, ret, param1, ...) \
|
||||
static ret _cb_##name(union {void *_generic; param1;} \
|
||||
__attribute__((transparent_union)), ##__VA_ARGS__); \
|
||||
static typeof(_cb_##name) *name = (typeof(_cb_##name)*)_cb_##name; \
|
||||
static ret (*name)(void*, ##__VA_ARGS__) = _cb_##name; \
|
||||
static ret _cb_##name(param1, ##__VA_ARGS__)
|
||||
|
||||
/**
|
||||
@ -131,7 +131,7 @@
|
||||
__attribute__((transparent_union)), \
|
||||
union {void *_generic; param2;} \
|
||||
__attribute__((transparent_union)), ##__VA_ARGS__); \
|
||||
static typeof(_cb_##name) *name = (typeof(_cb_##name)*)_cb_##name; \
|
||||
static ret (*name)(void*, void*, ##__VA_ARGS__) = _cb_##name; \
|
||||
static ret _cb_##name(param1, param2, ##__VA_ARGS__)
|
||||
|
||||
#endif /** OBJECT_H_ @} */
|
||||
|
Loading…
x
Reference in New Issue
Block a user