From: Alan T. DeKok Date: Thu, 20 Jul 2023 11:49:41 +0000 (-0400) Subject: add fr_box() generic X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a0c36bd7a9f766ea218e9c67b1f2bb85467326b1;p=thirdparty%2Ffreeradius-server.git add fr_box() generic which only works for some leaf types, as there string / octets types need also to deal with length and talloc issues. Other types like ipaddr need to check the contents of the source. --- diff --git a/src/lib/util/value.h b/src/lib/util/value.h index 233c3431357..0745d405e0b 100644 --- a/src/lib/util/value.h +++ b/src/lib/util/value.h @@ -251,6 +251,22 @@ typedef enum { #define _fr_box(_type, _field, _val) (&(fr_value_box_t){ .type = _type, _field = (_val) }) +#define fr_box(_val) _Generic((_val), \ + bool : _fr_box(FR_TYPE_BOOL, .vb_bool, _val), \ + int8_t : _fr_box(FR_TYPE_INT8, .vb_int8, _val), \ + int16_t : _fr_box(FR_TYPE_INT16, .vb_int16, _val), \ + int32_t : _fr_box(FR_TYPE_INT32, .vb_int32, _val), \ + int64_t : _fr_box(FR_TYPE_INT64, .vb_int64, _val), \ + uint8_t : _fr_box(FR_TYPE_UINT8, .vb_uint8, _val), \ + uint16_t : _fr_box(FR_TYPE_UINT16, .vb_uint16, _val), \ + uint32_t : _fr_box(FR_TYPE_UINT32, .vb_uint32, _val), \ + uint64_t : _fr_box(FR_TYPE_UINT64, .vb_uint64, _val), \ + size_t : _fr_box(FR_TYPE_SIZE, .vb_size, _val), \ + float : _fr_box(FR_TYPE_FLOAT32, .vb_float32, _val), \ + double : _fr_box(FR_TYPE_FLOAT64, .vb_float64, _val), \ + char * : _fr_box_with_len(FR_TYPE_STRING, .vb_strvalue, _val, strlen(_val)) \ + default : (void) 0) + #define fr_box_ipaddr(_val) _fr_box((((_val).af == AF_INET) ? \ (((_val).prefix == 32) ? FR_TYPE_IPV4_ADDR : \ FR_TYPE_IPV4_PREFIX) : \