* @param _x pointer to check.
* @param _t type to check compatibility with.
*/
-#define is_compatible(_x, _t) _Generic((_x), _t:1, default: 0)
+#define is_compatible(_x, _t) _Generic(_x, _t:1, default: 0)
/** Check the type #_t matches the destination data type
*
__builtin_choose_expr(is_compatible((_ct), fr_time_delta_t *), _p, (_mismatch_time_delta) 0), \
__builtin_choose_expr((FR_BASE_TYPE(_t) == FR_TYPE_TIME_DELTA) && ((_t) & FR_TYPE_MULTI), \
__builtin_choose_expr(is_compatible((_ct), fr_time_delta_t **), _p, (_mismatch_time_delta_m) 0), \
+__builtin_choose_expr((FR_BASE_TYPE(_t) == FR_TYPE_ETHERNET) && !((_t) & FR_TYPE_MULTI), \
+ __builtin_choose_expr(is_compatible((_ct), uint8_t(*)[6]), _p, (_mismatch_ethernet) 0), \
+__builtin_choose_expr((FR_BASE_TYPE(_t) == FR_TYPE_ETHERNET) && ((_t) & FR_TYPE_MULTI), \
+ __builtin_choose_expr(is_compatible((_ct), uint8_t ***), _p, (_mismatch_ethernet_m) 0), \
+__builtin_choose_expr((FR_BASE_TYPE(_t) == FR_TYPE_IFID) && !((_t) & FR_TYPE_MULTI), \
+ __builtin_choose_expr(is_compatible((_ct), uint8_t(*)[8]), _p, (_mismatch_ifid) 0), \
+__builtin_choose_expr((FR_BASE_TYPE(_t) == FR_TYPE_IFID) && ((_t) & FR_TYPE_MULTI), \
+ __builtin_choose_expr(is_compatible((_ct), uint8_t ***), _p, (_mismatch_ifid_m) 0), \
_Generic((_ct), \
vp_tmpl_t ** : __builtin_choose_expr(((_t) & FR_TYPE_TMPL) && !((_t) & FR_TYPE_MULTI), \
_p, (_mismatch_vp_tmpl) 0), \
_p, (_mismatch_uint8) 0), \
uint8_t ** : __builtin_choose_expr((FR_BASE_TYPE(_t) == FR_TYPE_UINT8) && ((_t) & FR_TYPE_MULTI), \
_p, (_mismatch_uint8_m) 0), \
- uint8_t[8] : __builtin_choose_expr((FR_BASE_TYPE(_t) == FR_TYPE_IFID) && !(_t & FR_TYPE_MULTI), \
- _p, (_mismatch_ifid) 0), \
- uint8_t*[8] : __builtin_choose_expr((FR_BASE_TYPE(_t) == FR_TYPE_IFID) && ((_t) & FR_TYPE_MULTI), \
- _p, (_mismatch_ifid_m) 0), \
uint16_t * : __builtin_choose_expr((FR_BASE_TYPE(_t) == FR_TYPE_UINT16) && !((_t) & FR_TYPE_MULTI), \
_p, (_mismatch_uint16) 0), \
uint16_t ** : __builtin_choose_expr((FR_BASE_TYPE(_t) == FR_TYPE_UINT16) && ((_t) & FR_TYPE_MULTI), \
_p, (_mismatch_uint16_m) 0), \
- uint8_t[6] : __builtin_choose_expr((FR_BASE_TYPE(_t) == FR_TYPE_ETHERNET) && !((_t) & FR_TYPE_MULTI), \
- _p, (_mismatch_ethernet) 0), \
- uint8_t*[6] : __builtin_choose_expr((FR_BASE_TYPE(_t) == FR_TYPE_ETHERNET) && ((_t) & FR_TYPE_MULTI), \
- _p, (_mismatch_ethernet_m) 0), \
int32_t * : __builtin_choose_expr((FR_BASE_TYPE(_t) == FR_TYPE_INT32) && !((_t) & FR_TYPE_MULTI), \
_p, (_mismatch_int32) 0), \
int32_t ** : __builtin_choose_expr((FR_BASE_TYPE(_t) == FR_TYPE_INT32) && ((_t) & FR_TYPE_MULTI), \
_p, (_mismatch_double) 0), \
double ** : __builtin_choose_expr((FR_BASE_TYPE(_t) == FR_TYPE_FLOAT64) && ((_t) & FR_TYPE_MULTI), \
_p, (_mismatch_double_m) 0), \
- default: (conf_type_mismatch)0)))))))))
+ default: (conf_type_mismatch)0)))))))))))))
# define FR_CONF_OFFSET(_n, _t, _s, _f) \
.name = _n, \