ftypes: create a set_value union

struct _ftype_t contains a number of pointers to set_value_...()
functions. For each pre-defined ftype_t, only one of these pointers
is != NULL.

As the comment already says, we should move these functions into a
union. ftenum_t ftype will be used for selecting the correct function
pointer from the union.

Create a set_value union and move the FvalueSetByteArrayFunc pointer
into the union. Update fvalue_set_byte_array() accordingly. Check
that the fvalue_t parameter is of the correct type.

Change-Id: I6568d8f47108311289c0cd425f28ea8b38046141
Reviewed-on: https://code.wireshark.org/review/20433
Petri-Dish: Martin Kaiser <wireshark@kaiser.cx>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Martin Kaiser <wireshark@kaiser.cx>
This commit is contained in:
Martin Kaiser 2017-03-04 16:15:54 +01:00
parent 4caa64fc18
commit 25015a00a3
14 changed files with 103 additions and 49 deletions

View File

@ -737,7 +737,8 @@ ftype_register_bytes(void)
bytes_to_repr, /* val_to_string_repr */
bytes_repr_len, /* len_string_repr */
bytes_fvalue_set, /* set_value_byte_array */
{ .set_value_byte_array = bytes_fvalue_set }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -782,7 +783,8 @@ ftype_register_bytes(void)
bytes_to_repr, /* val_to_string_repr */
bytes_repr_len, /* len_string_repr */
bytes_fvalue_set, /* set_value_byte_array */
{ .set_value_byte_array = bytes_fvalue_set }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -827,7 +829,8 @@ ftype_register_bytes(void)
bytes_to_repr, /* val_to_string_repr */
bytes_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
ax25_fvalue_set, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -872,7 +875,8 @@ ftype_register_bytes(void)
bytes_to_repr, /* val_to_string_repr */
bytes_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
vines_fvalue_set, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -917,7 +921,8 @@ ftype_register_bytes(void)
bytes_to_repr, /* val_to_string_repr */
bytes_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
ether_fvalue_set, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -962,7 +967,8 @@ ftype_register_bytes(void)
oid_to_repr, /* val_to_string_repr */
oid_repr_len, /* len_string_repr */
oid_fvalue_set, /* set_value_byte_array */
{ .set_value_byte_array = oid_fvalue_set }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -1007,7 +1013,8 @@ ftype_register_bytes(void)
rel_oid_to_repr, /* val_to_string_repr */
rel_oid_repr_len, /* len_string_repr */
oid_fvalue_set, /* set_value_byte_array (same as full oid) */
{ .set_value_byte_array = oid_fvalue_set }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -1052,7 +1059,8 @@ ftype_register_bytes(void)
system_id_to_repr, /* val_to_string_repr */
bytes_repr_len, /* len_string_repr */
system_id_fvalue_set, /* set_value_byte_array */
{ .set_value_byte_array = system_id_fvalue_set }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -1097,7 +1105,8 @@ ftype_register_bytes(void)
bytes_to_repr, /* val_to_string_repr */
bytes_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
fcwwn_fvalue_set, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */

View File

@ -170,7 +170,8 @@ ftype_register_double(void)
float_val_to_repr, /* val_to_string_repr */
float_val_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -215,7 +216,8 @@ ftype_register_double(void)
double_val_to_repr, /* val_to_string_repr */
double_val_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */

View File

@ -135,7 +135,8 @@ ftype_register_guid(void)
guid_to_repr, /* val_to_string_repr */
guid_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
guid_fvalue_set_guid, /* set_value_guid */
NULL, /* set_value_time */

View File

@ -1438,7 +1438,8 @@ Example: 114 is 0x0072
sfloat_ieee_11073_val_to_repr, /* val_to_string_repr */
sfloat_ieee_11073_val_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -1510,7 +1511,8 @@ Example: 36.4 is 0xFF00016C
float_ieee_11073_val_to_repr, /* val_to_string_repr */
float_ieee_11073_val_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */

View File

@ -1026,7 +1026,8 @@ ftype_register_integers(void)
char_to_repr, /* val_to_string_repr */
char_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -1070,7 +1071,8 @@ ftype_register_integers(void)
uinteger_to_repr, /* val_to_string_repr */
uinteger_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -1114,8 +1116,9 @@ ftype_register_integers(void)
uinteger_to_repr, /* val_to_string_repr */
uinteger_repr_len, /* len_string_repr */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_byte_array */
NULL, /* set_value_guid */
NULL, /* set_value_time */
NULL, /* set_value_string */
@ -1158,7 +1161,8 @@ ftype_register_integers(void)
uinteger_to_repr, /* val_to_string_repr */
uinteger_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -1202,7 +1206,8 @@ ftype_register_integers(void)
uinteger_to_repr, /* val_to_string_repr */
uinteger_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -1246,7 +1251,8 @@ ftype_register_integers(void)
uinteger64_to_repr, /* val_to_string_repr */
uinteger64_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -1290,7 +1296,8 @@ ftype_register_integers(void)
uinteger64_to_repr, /* val_to_string_repr */
uinteger64_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -1334,7 +1341,8 @@ ftype_register_integers(void)
uinteger64_to_repr, /* val_to_string_repr */
uinteger64_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -1378,7 +1386,8 @@ ftype_register_integers(void)
uinteger64_to_repr, /* val_to_string_repr */
uinteger64_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -1422,7 +1431,8 @@ ftype_register_integers(void)
integer_to_repr, /* val_to_string_repr */
integer_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -1466,7 +1476,8 @@ ftype_register_integers(void)
integer_to_repr, /* val_to_string_repr */
integer_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -1510,7 +1521,8 @@ ftype_register_integers(void)
integer_to_repr, /* val_to_string_repr */
integer_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -1554,7 +1566,8 @@ ftype_register_integers(void)
integer_to_repr, /* val_to_string_repr */
integer_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -1598,7 +1611,8 @@ ftype_register_integers(void)
integer64_to_repr, /* val_to_string_repr */
integer64_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -1642,7 +1656,8 @@ ftype_register_integers(void)
integer64_to_repr, /* val_to_string_repr */
integer64_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -1686,7 +1701,8 @@ ftype_register_integers(void)
integer64_to_repr, /* val_to_string_repr */
integer64_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -1730,7 +1746,8 @@ ftype_register_integers(void)
integer64_to_repr, /* val_to_string_repr */
integer64_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -1774,7 +1791,8 @@ ftype_register_integers(void)
boolean_to_repr, /* val_to_string_repr */
boolean_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -1819,7 +1837,8 @@ ftype_register_integers(void)
ipxnet_to_repr, /* val_to_string_repr */
ipxnet_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -1864,7 +1883,8 @@ ftype_register_integers(void)
uinteger_to_repr, /* val_to_string_repr */
uinteger_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -1909,7 +1929,8 @@ ftype_register_integers(void)
eui64_to_repr, /* val_to_string_repr */
eui64_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */

View File

@ -185,7 +185,8 @@ ftype_register_ipv4(void)
val_to_repr, /* val_to_string_repr */
val_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */

View File

@ -235,7 +235,8 @@ ftype_register_ipv6(void)
ipv6_to_repr, /* val_to_string_repr */
ipv6_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
ipv6_fvalue_set, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */

View File

@ -39,7 +39,8 @@ ftype_register_none(void)
NULL, /* val_to_string_repr */
NULL, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */

View File

@ -163,7 +163,8 @@ ftype_register_pcre(void)
gregex_to_repr, /* val_to_string_repr */
gregex_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */

View File

@ -463,7 +463,8 @@ ftype_register_tvbuff(void)
val_to_repr, /* val_to_string_repr */
val_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */

View File

@ -240,7 +240,8 @@ ftype_register_string(void)
string_to_repr, /* val_to_string_repr */
string_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -284,7 +285,8 @@ ftype_register_string(void)
string_to_repr, /* val_to_string_repr */
string_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -328,7 +330,8 @@ ftype_register_string(void)
string_to_repr, /* val_to_string_repr */
string_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */
@ -372,7 +375,8 @@ ftype_register_string(void)
string_to_repr, /* val_to_string_repr */
string_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
NULL, /* set_value_time */

View File

@ -395,7 +395,8 @@ ftype_register_time(void)
absolute_val_to_repr, /* val_to_string_repr */
absolute_val_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
time_fvalue_set, /* set_value_time */
@ -439,7 +440,8 @@ ftype_register_time(void)
relative_val_to_repr, /* val_to_string_repr */
relative_val_repr_len, /* len_string_repr */
NULL, /* set_value_byte_array */
{ NULL }, /* union set_value */
NULL, /* set_value_bytes */
NULL, /* set_value_guid */
time_fvalue_set, /* set_value_time */

View File

@ -90,8 +90,11 @@ struct _ftype_t {
FvalueToStringRepr val_to_string_repr;
FvalueStringReprLen len_string_repr;
union {
FvalueSetByteArrayFunc set_value_byte_array;
} set_value;
/* could be union */
FvalueSetByteArrayFunc set_value_byte_array;
FvalueSetBytesFunc set_value_bytes;
FvalueSetGuidFunc set_value_guid;
FvalueSetTimeFunc set_value_time;

View File

@ -499,8 +499,13 @@ fvalue_slice(fvalue_t *fv, drange_t *d_range)
void
fvalue_set_byte_array(fvalue_t *fv, GByteArray *value)
{
g_assert(fv->ftype->set_value_byte_array);
fv->ftype->set_value_byte_array(fv, value);
g_assert(fv->ftype->ftype == FT_BYTES ||
fv->ftype->ftype == FT_UINT_BYTES ||
fv->ftype->ftype == FT_OID ||
fv->ftype->ftype == FT_REL_OID ||
fv->ftype->ftype == FT_SYSTEM_ID);
g_assert(fv->ftype->set_value.set_value_byte_array);
fv->ftype->set_value.set_value_byte_array(fv, value);
}
void