From 61867d0b2f80971dc6927c50f61a4d2bb0420cad Mon Sep 17 00:00:00 2001 From: Guy Harris Date: Wed, 15 Jan 2014 01:05:03 +0000 Subject: [PATCH] Eliminate fvalue_set() in favor of routines that take arguments appropriate for particular FT_ types. This lets us do some more type checking and lets us use const pointers when appropriate. Constify a bunch of stuff, and don't cast away constness. svn path=/trunk/; revision=54811 --- epan/dfilter/dfunctions.c | 2 +- epan/ftypes/ftype-bytes.c | 145 ++++++++++++++++++------------ epan/ftypes/ftype-double.c | 16 +++- epan/ftypes/ftype-guid.c | 19 ++-- epan/ftypes/ftype-integer.c | 170 +++++++++++++++++++++++++----------- epan/ftypes/ftype-ipv4.c | 13 ++- epan/ftypes/ftype-ipv6.c | 15 ++-- epan/ftypes/ftype-none.c | 7 +- epan/ftypes/ftype-pcre.c | 16 ++-- epan/ftypes/ftype-string.c | 32 ++++--- epan/ftypes/ftype-time.c | 32 ++++--- epan/ftypes/ftype-tvbuff.c | 17 ++-- epan/ftypes/ftypes-int.h | 18 +++- epan/ftypes/ftypes.c | 47 ++++++++-- epan/ftypes/ftypes.h | 21 ++++- epan/proto.c | 51 +++++------ epan/proto.h | 6 +- 17 files changed, 423 insertions(+), 204 deletions(-) diff --git a/epan/dfilter/dfunctions.c b/epan/dfilter/dfunctions.c index 408156bae0..90bd167866 100644 --- a/epan/dfilter/dfunctions.c +++ b/epan/dfilter/dfunctions.c @@ -74,7 +74,7 @@ string_walk(GList* arg1list, GList **retval, gchar(*conv_func)(gchar)) } new_ft_string = fvalue_new(FT_STRING); - fvalue_set(new_ft_string, s, FALSE); + fvalue_set_string(new_ft_string, s); *retval = g_list_append(*retval, new_ft_string); break; diff --git a/epan/ftypes/ftype-bytes.c b/epan/ftypes/ftype-bytes.c index 62fb62cbd3..74d96b0687 100644 --- a/epan/ftypes/ftype-bytes.c +++ b/epan/ftypes/ftype-bytes.c @@ -50,14 +50,12 @@ bytes_fvalue_free(fvalue_t *fv) static void -bytes_fvalue_set(fvalue_t *fv, gpointer value, gboolean already_copied) +bytes_fvalue_set(fvalue_t *fv, GByteArray *value) { - g_assert(already_copied); - /* Free up the old value, if we have one */ bytes_fvalue_free(fv); - fv->value.bytes = (GByteArray *)value; + fv->value.bytes = value; } static int @@ -163,7 +161,7 @@ bytes_to_repr(fvalue_t *fv, ftrepr_t rtype _U_, char *buf) } static void -common_fvalue_set(fvalue_t *fv, guint8* data, guint len) +common_fvalue_set(fvalue_t *fv, const guint8* data, guint len) { /* Free up the old value, if we have one */ bytes_fvalue_free(fv); @@ -173,46 +171,39 @@ common_fvalue_set(fvalue_t *fv, guint8* data, guint len) } static void -ax25_fvalue_set(fvalue_t *fv, gpointer value, gboolean already_copied) +ax25_fvalue_set(fvalue_t *fv, const guint8 *value) { - g_assert(!already_copied); - common_fvalue_set(fv, (guint8 *)value, FT_AX25_ADDR_LEN); + common_fvalue_set(fv, value, FT_AX25_ADDR_LEN); } static void -vines_fvalue_set(fvalue_t *fv, gpointer value, gboolean already_copied) +vines_fvalue_set(fvalue_t *fv, const guint8 *value) { - g_assert(!already_copied); - common_fvalue_set(fv, (guint8 *)value, FT_VINES_ADDR_LEN); + common_fvalue_set(fv, value, FT_VINES_ADDR_LEN); } static void -ether_fvalue_set(fvalue_t *fv, gpointer value, gboolean already_copied) +ether_fvalue_set(fvalue_t *fv, const guint8 *value) { - g_assert(!already_copied); - common_fvalue_set(fv, (guint8*)value, FT_ETHER_LEN); + common_fvalue_set(fv, value, FT_ETHER_LEN); } static void -oid_fvalue_set(fvalue_t *fv, gpointer value, gboolean already_copied) +oid_fvalue_set(fvalue_t *fv, GByteArray *value) { - g_assert(already_copied); - /* Free up the old value, if we have one */ bytes_fvalue_free(fv); - fv->value.bytes = (GByteArray *)value; + fv->value.bytes = value; } static void -system_id_fvalue_set(fvalue_t *fv, gpointer value, gboolean already_copied) +system_id_fvalue_set(fvalue_t *fv, GByteArray *value) { - g_assert(already_copied); - /* Free up the old value, if we have one */ bytes_fvalue_free(fv); - fv->value.bytes = (GByteArray *)value; + fv->value.bytes = value; } static gpointer @@ -222,7 +213,7 @@ value_get(fvalue_t *fv) } static gboolean -bytes_from_string(fvalue_t *fv, char *s, LogFunc logfunc _U_) +bytes_from_string(fvalue_t *fv, const char *s, LogFunc logfunc _U_) { GByteArray *bytes; @@ -238,7 +229,7 @@ bytes_from_string(fvalue_t *fv, char *s, LogFunc logfunc _U_) } static gboolean -bytes_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value _U_, LogFunc logfunc) +bytes_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_value _U_, LogFunc logfunc) { GByteArray *bytes; gboolean res; @@ -263,7 +254,7 @@ bytes_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value _U_, Log } static gboolean -ax25_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value, LogFunc logfunc) +ax25_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_value, LogFunc logfunc) { /* * Don't log a message if this fails; we'll try looking it @@ -321,7 +312,7 @@ ax25_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value, LogFunc } static gboolean -vines_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value, LogFunc logfunc) +vines_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_value, LogFunc logfunc) { /* * Don't log a message if this fails; we'll try looking it @@ -350,7 +341,7 @@ vines_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value, LogFunc } static gboolean -ether_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value, LogFunc logfunc) +ether_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_value, LogFunc logfunc) { guint8 *mac; @@ -381,12 +372,12 @@ ether_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value, LogFunc return FALSE; } - ether_fvalue_set(fv, mac, FALSE); + ether_fvalue_set(fv, mac); return TRUE; } static gboolean -oid_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value _U_, LogFunc logfunc) +oid_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_value _U_, LogFunc logfunc) { GByteArray *bytes; gboolean res; @@ -420,7 +411,7 @@ oid_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value _U_, LogFu } static gboolean -rel_oid_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value _U_, LogFunc logfunc) +rel_oid_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_value _U_, LogFunc logfunc) { GByteArray *bytes; gboolean res; @@ -448,7 +439,7 @@ rel_oid_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value _U_, L } static gboolean -system_id_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value _U_, LogFunc logfunc) +system_id_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_value _U_, LogFunc logfunc) { /* * Don't log a message if this fails; we'll try looking it @@ -677,28 +668,33 @@ ftype_register_bytes(void) { static ftype_t bytes_type = { - FT_BYTES, /* ftype */ - "FT_BYTES", /* name */ + FT_BYTES, /* ftype */ + "FT_BYTES", /* name */ "Sequence of bytes", /* pretty_name */ - 0, /* wire_size */ - bytes_fvalue_new, /* new_value */ - bytes_fvalue_free, /* free_value */ + 0, /* wire_size */ + bytes_fvalue_new, /* new_value */ + bytes_fvalue_free, /* free_value */ bytes_from_unparsed, /* val_from_unparsed */ - bytes_from_string, /* val_from_string */ - bytes_to_repr, /* val_to_string_repr */ - bytes_repr_len, /* len_string_repr */ + bytes_from_string, /* val_from_string */ + bytes_to_repr, /* val_to_string_repr */ + bytes_repr_len, /* len_string_repr */ - bytes_fvalue_set, /* set_value */ - NULL, /* set_value_uinteger */ - NULL, /* set_value_sinteger */ - NULL, /* set_value_integer64 */ - NULL, /* set_value_floating */ + bytes_fvalue_set, /* set_value_byte_array */ + NULL, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + NULL, /* set_value_string */ + NULL, /* set_value_tvbuff */ + NULL, /* set_value_uinteger */ + NULL, /* set_value_sinteger */ + NULL, /* set_value_integer64 */ + NULL, /* set_value_floating */ - value_get, /* get_value */ - NULL, /* get_value_uinteger */ - NULL, /* get_value_sinteger */ - NULL, /* get_value_integer64 */ - NULL, /* get_value_floating */ + value_get, /* get_value */ + NULL, /* get_value_uinteger */ + NULL, /* get_value_sinteger */ + NULL, /* get_value_integer64 */ + NULL, /* get_value_floating */ cmp_eq, cmp_ne, @@ -726,7 +722,12 @@ ftype_register_bytes(void) bytes_to_repr, /* val_to_string_repr */ bytes_repr_len, /* len_string_repr */ - bytes_fvalue_set, /* set_value */ + bytes_fvalue_set, /* set_value_byte_array */ + NULL, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + NULL, /* set_value_string */ + NULL, /* set_value_tvbuff */ NULL, /* set_value_uinteger */ NULL, /* set_value_sinteger */ NULL, /* set_value_integer64 */ @@ -764,7 +765,12 @@ ftype_register_bytes(void) bytes_to_repr, /* val_to_string_repr */ bytes_repr_len, /* len_string_repr */ - ax25_fvalue_set, /* set_value */ + NULL, /* set_value_byte_array */ + ax25_fvalue_set, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + NULL, /* set_value_string */ + NULL, /* set_value_tvbuff */ NULL, /* set_value_uinteger */ NULL, /* set_value_integer */ NULL, /* set_value_integer64 */ @@ -797,12 +803,17 @@ ftype_register_bytes(void) FT_VINES_ADDR_LEN, /* wire_size */ bytes_fvalue_new, /* new_value */ bytes_fvalue_free, /* free_value */ - vines_from_unparsed, /* val_from_unparsed */ + vines_from_unparsed, /* val_from_unparsed */ NULL, /* val_from_string */ bytes_to_repr, /* val_to_string_repr */ bytes_repr_len, /* len_string_repr */ - vines_fvalue_set, /* set_value */ + NULL, /* set_value_byte_array */ + vines_fvalue_set, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + NULL, /* set_value_string */ + NULL, /* set_value_tvbuff */ NULL, /* set_value_uinteger */ NULL, /* set_value_integer */ NULL, /* set_value_integer64 */ @@ -840,7 +851,12 @@ ftype_register_bytes(void) bytes_to_repr, /* val_to_string_repr */ bytes_repr_len, /* len_string_repr */ - ether_fvalue_set, /* set_value */ + NULL, /* set_value_byte_array */ + ether_fvalue_set, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + NULL, /* set_value_string */ + NULL, /* set_value_tvbuff */ NULL, /* set_value_uinteger */ NULL, /* set_value_sinteger */ NULL, /* set_value_integer64 */ @@ -878,7 +894,12 @@ ftype_register_bytes(void) oid_to_repr, /* val_to_string_repr */ oid_repr_len, /* len_string_repr */ - oid_fvalue_set, /* set_value */ + oid_fvalue_set, /* set_value_byte_array */ + NULL, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + NULL, /* set_value_string */ + NULL, /* set_value_tvbuff */ NULL, /* set_value_uinteger */ NULL, /* set_value_sinteger */ NULL, /* set_value_integer64 */ @@ -916,7 +937,12 @@ ftype_register_bytes(void) rel_oid_to_repr, /* val_to_string_repr */ rel_oid_repr_len, /* len_string_repr */ - oid_fvalue_set, /* set_value (same as full oid) */ + oid_fvalue_set, /* set_value_byte_array (same as full oid) */ + NULL, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + NULL, /* set_value_string */ + NULL, /* set_value_tvbuff */ NULL, /* set_value_uinteger */ NULL, /* set_value_sinteger */ NULL, /* set_value_integer64 */ @@ -954,7 +980,12 @@ ftype_register_bytes(void) system_id_to_repr, /* val_to_string_repr */ bytes_repr_len, /* len_string_repr */ - system_id_fvalue_set, /* set_value */ + system_id_fvalue_set, /* set_value_byte_array */ + NULL, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + NULL, /* set_value_string */ + NULL, /* set_value_tvbuff */ NULL, /* set_value_uinteger */ NULL, /* set_value_sinteger */ NULL, /* set_value_integer64 */ diff --git a/epan/ftypes/ftype-double.c b/epan/ftypes/ftype-double.c index 6c81838cb9..7df01003bb 100644 --- a/epan/ftypes/ftype-double.c +++ b/epan/ftypes/ftype-double.c @@ -49,7 +49,7 @@ value_get_floating(fvalue_t *fv) } static gboolean -val_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value _U_, LogFunc logfunc) +val_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_value _U_, LogFunc logfunc) { char *endptr = NULL; @@ -166,7 +166,12 @@ ftype_register_double(void) float_val_to_repr, /* val_to_string_repr */ float_val_repr_len, /* len_string_repr */ - NULL, /* set_value */ + NULL, /* set_value_byte_array */ + NULL, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + NULL, /* set_value_string */ + NULL, /* set_value_tvbuff */ NULL, /* set_value_uinteger */ NULL, /* set_value_snteger */ NULL, /* set_value_integer64 */ @@ -204,7 +209,12 @@ ftype_register_double(void) double_val_to_repr, /* val_to_string_repr */ double_val_repr_len, /* len_string_repr */ - NULL, /* set_value */ + NULL, /* set_value_byte_array */ + NULL, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + NULL, /* set_value_string */ + NULL, /* set_value_tvbuff */ NULL, /* set_value_uinteger */ NULL, /* set_value_sinteger */ NULL, /* set_value_integer64 */ diff --git a/epan/ftypes/ftype-guid.c b/epan/ftypes/ftype-guid.c index 191694bee6..205ffc453d 100644 --- a/epan/ftypes/ftype-guid.c +++ b/epan/ftypes/ftype-guid.c @@ -31,10 +31,9 @@ #include static void -guid_fvalue_set(fvalue_t *fv, gpointer value, gboolean already_copied) +guid_fvalue_set_guid(fvalue_t *fv, const e_guid_t *value) { - g_assert(!already_copied); - fv->value.guid = *(e_guid_t*)value; + fv->value.guid = *value; } static gpointer @@ -44,10 +43,11 @@ value_get(fvalue_t *fv) } static gboolean -get_guid(char *s, e_guid_t *guid) +get_guid(const char *s, e_guid_t *guid) { size_t i, n; - char *p, digits[9]; + const char *p; + char digits[9]; static const char fmt[] = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"; n = strlen(s); @@ -87,7 +87,7 @@ get_guid(char *s, e_guid_t *guid) } static gboolean -guid_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value _U_, LogFunc logfunc) +guid_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_value _U_, LogFunc logfunc) { e_guid_t guid; @@ -140,7 +140,12 @@ ftype_register_guid(void) guid_to_repr, /* val_to_string_repr */ guid_repr_len, /* len_string_repr */ - guid_fvalue_set, /* set_value */ + NULL, /* set_value_byte_array */ + NULL, /* set_value_bytes */ + guid_fvalue_set_guid, /* set_value_guid */ + NULL, /* set_value_time */ + NULL, /* set_value_string */ + NULL, /* set_value_tvbuff */ NULL, /* set_value_uinteger */ NULL, /* set_value_sinteger */ NULL, /* set_value_integer64 */ diff --git a/epan/ftypes/ftype-integer.c b/epan/ftypes/ftype-integer.c index be401a0b3a..aeaf750710 100644 --- a/epan/ftypes/ftype-integer.c +++ b/epan/ftypes/ftype-integer.c @@ -64,7 +64,7 @@ get_sinteger(fvalue_t *fv) static gboolean -uint_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value _U_, LogFunc logfunc, +uint_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_value _U_, LogFunc logfunc, guint32 max) { unsigned long value; @@ -117,31 +117,31 @@ uint_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value _U_, LogF } static gboolean -uint32_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value, LogFunc logfunc) +uint32_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_value, LogFunc logfunc) { return uint_from_unparsed (fv, s, allow_partial_value, logfunc, G_MAXUINT32); } static gboolean -uint24_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value, LogFunc logfunc) +uint24_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_value, LogFunc logfunc) { return uint_from_unparsed (fv, s, allow_partial_value, logfunc, 0xFFFFFF); } static gboolean -uint16_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value, LogFunc logfunc) +uint16_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_value, LogFunc logfunc) { return uint_from_unparsed (fv, s, allow_partial_value, logfunc, G_MAXUINT16); } static gboolean -uint8_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value, LogFunc logfunc) +uint8_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_value, LogFunc logfunc) { return uint_from_unparsed (fv, s, allow_partial_value, logfunc, G_MAXUINT8); } static gboolean -sint_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value _U_, LogFunc logfunc, +sint_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_value _U_, LogFunc logfunc, gint32 max, gint32 min) { long value; @@ -202,25 +202,25 @@ sint_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value _U_, LogF } static gboolean -sint32_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value, LogFunc logfunc) +sint32_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_value, LogFunc logfunc) { return sint_from_unparsed (fv, s, allow_partial_value, logfunc, G_MAXINT32, G_MININT32); } static gboolean -sint24_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value, LogFunc logfunc) +sint24_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_value, LogFunc logfunc) { return sint_from_unparsed (fv, s, allow_partial_value, logfunc, 0x7FFFFF, -0x800000); } static gboolean -sint16_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value, LogFunc logfunc) +sint16_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_value, LogFunc logfunc) { return sint_from_unparsed (fv, s, allow_partial_value, logfunc, G_MAXINT16, G_MININT16); } static gboolean -sint8_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value, LogFunc logfunc) +sint8_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_value, LogFunc logfunc) { return sint_from_unparsed (fv, s, allow_partial_value, logfunc, G_MAXINT8, G_MININT8); } @@ -258,7 +258,7 @@ uinteger_to_repr(fvalue_t *fv, ftrepr_t rtype _U_, char *buf) } static gboolean -ipxnet_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value _U_, LogFunc logfunc) +ipxnet_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_value _U_, LogFunc logfunc) { guint32 val; gboolean known; @@ -379,7 +379,7 @@ get_integer64(fvalue_t *fv) } static gboolean -uint64_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value _U_, LogFunc logfunc) +uint64_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_value _U_, LogFunc logfunc) { guint64 value; char *endptr; @@ -424,7 +424,7 @@ uint64_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value _U_, Lo } static gboolean -sint64_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value _U_, LogFunc logfunc) +sint64_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_value _U_, LogFunc logfunc) { gint64 value; char *endptr; @@ -613,7 +613,7 @@ bool_ne(const fvalue_t *a, const fvalue_t *b) /* EUI64-specific */ static gboolean -eui64_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value _U_, LogFunc logfunc) +eui64_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_value _U_, LogFunc logfunc) { /* @@ -664,7 +664,12 @@ ftype_register_integers(void) uinteger_to_repr, /* val_to_string_repr */ uinteger_repr_len, /* len_string_repr */ - NULL, /* set_value */ + NULL, /* set_value_byte_array */ + NULL, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + NULL, /* set_value_string */ + NULL, /* set_value_tvbuff */ set_uinteger, /* set_value_uinteger */ NULL, /* set_value_sinteger */ NULL, /* set_value_integer64 */ @@ -701,8 +706,13 @@ ftype_register_integers(void) uinteger_to_repr, /* val_to_string_repr */ uinteger_repr_len, /* len_string_repr */ - NULL, /* set_value */ - set_uinteger, /* set_value_uinteger */ + NULL, /* set_value_bytes */ + NULL, /* set_value_byte_array */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + NULL, /* set_value_string */ + NULL, /* set_value_tvbuff */ + set_uinteger, /* set_value_uinteger */ NULL, /* set_value_sinteger */ NULL, /* set_value_integer64 */ NULL, /* set_value_floating */ @@ -738,8 +748,13 @@ ftype_register_integers(void) uinteger_to_repr, /* val_to_string_repr */ uinteger_repr_len, /* len_string_repr */ - NULL, /* set_value */ - set_uinteger, /* set_value_integer */ + NULL, /* set_value_byte_array */ + NULL, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + NULL, /* set_value_string */ + NULL, /* set_value_tvbuff */ + set_uinteger, /* set_value_integer */ NULL, /* set_value_sinteger */ NULL, /* set_value_integer64 */ NULL, /* set_value_floating */ @@ -775,14 +790,19 @@ ftype_register_integers(void) uinteger_to_repr, /* val_to_string_repr */ uinteger_repr_len, /* len_string_repr */ - NULL, /* set_value */ - set_uinteger, /* set_value_uinteger */ + NULL, /* set_value_byte_array */ + NULL, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + NULL, /* set_value_string */ + NULL, /* set_value_tvbuff */ + set_uinteger, /* set_value_uinteger */ NULL, /* set_value_sinteger */ NULL, /* set_value_integer64 */ NULL, /* set_value_floating */ NULL, /* get_value */ - get_uinteger, /* get_value_integer */ + get_uinteger, /* get_value_integer */ NULL, /* get_value_sinteger */ NULL, /* get_value_integer64 */ NULL, /* get_value_floating */ @@ -812,16 +832,21 @@ ftype_register_integers(void) uinteger64_to_repr, /* val_to_string_repr */ uinteger64_repr_len, /* len_string_repr */ - NULL, /* set_value */ + NULL, /* set_value_byte_array */ + NULL, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + NULL, /* set_value_string */ + NULL, /* set_value_tvbuff */ NULL, /* set_value_uinteger */ NULL, /* set_value_sinteger */ - set_integer64, /* set_value_integer64 */ + set_integer64, /* set_value_integer64 */ NULL, /* set_value_floating */ NULL, /* get_value */ NULL, /* get_value_uinteger */ NULL, /* get_value_sinteger */ - get_integer64, /* get_value_integer64 */ + get_integer64, /* get_value_integer64 */ NULL, /* get_value_floating */ cmp_eq64, @@ -849,9 +874,14 @@ ftype_register_integers(void) integer_to_repr, /* val_to_string_repr */ integer_repr_len, /* len_string_repr */ - NULL, /* set_value */ + NULL, /* set_value_byte_array */ + NULL, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + NULL, /* set_value_string */ + NULL, /* set_value_tvbuff */ NULL, /* set_value_uinteger */ - set_sinteger, /* set_value_sinteger */ + set_sinteger, /* set_value_sinteger */ NULL, /* set_value_integer64 */ NULL, /* set_value_floating */ @@ -886,15 +916,20 @@ ftype_register_integers(void) integer_to_repr, /* val_to_string_repr */ integer_repr_len, /* len_string_repr */ - NULL, /* set_value */ + NULL, /* set_value_byte_array */ + NULL, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + NULL, /* set_value_string */ + NULL, /* set_value_tvbuff */ NULL, /* set_value_uinteger */ - set_sinteger, /* set_value_sinteger */ + set_sinteger, /* set_value_sinteger */ NULL, /* set_value_integer64 */ NULL, /* set_value_floating */ NULL, /* get_value */ NULL, /* get_value_uinteger */ - get_sinteger, /* get_value_sinteger */ + get_sinteger, /* get_value_sinteger */ NULL, /* get_value_integer64 */ NULL, /* get_value_floating */ @@ -923,9 +958,14 @@ ftype_register_integers(void) integer_to_repr, /* val_to_string_repr */ integer_repr_len, /* len_string_repr */ - NULL, /* set_value */ + NULL, /* set_value_byte_array */ + NULL, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + NULL, /* set_value_string */ + NULL, /* set_value_tvbuff */ NULL, /* set_value_uinteger */ - set_sinteger, /* set_value_sinteger */ + set_sinteger, /* set_value_sinteger */ NULL, /* set_value_integer64 */ NULL, /* set_value_floating */ @@ -960,15 +1000,20 @@ ftype_register_integers(void) integer_to_repr, /* val_to_string_repr */ integer_repr_len, /* len_string_repr */ - NULL, /* set_value */ + NULL, /* set_value_byte_array */ + NULL, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + NULL, /* set_value_string */ + NULL, /* set_value_tvbuff */ NULL, /* set_value_uinteger */ - set_sinteger, /* set_value_sinteger */ + set_sinteger, /* set_value_sinteger */ NULL, /* set_value_integer64 */ NULL, /* set_value_floating */ NULL, /* get_value */ NULL, /* get_value_uinteger */ - get_sinteger, /* get_value_sinteger */ + get_sinteger, /* get_value_sinteger */ NULL, /* get_value_integer64 */ NULL, /* get_value_floating */ @@ -997,16 +1042,21 @@ ftype_register_integers(void) integer64_to_repr, /* val_to_string_repr */ integer64_repr_len, /* len_string_repr */ - NULL, /* set_value */ + NULL, /* set_value_byte_array */ + NULL, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + NULL, /* set_value_string */ + NULL, /* set_value_tvbuff */ NULL, /* set_value_uinteger */ NULL, /* set_value_sinteger */ - set_integer64, /* set_value_integer64 */ + set_integer64, /* set_value_integer64 */ NULL, /* set_value_floating */ NULL, /* get_value */ NULL, /* get_value_uinteger */ NULL, /* get_value_sinteger */ - get_integer64, /* get_value_integer64 */ + get_integer64, /* get_value_integer64 */ NULL, /* get_value_floating */ cmp_eq64, @@ -1034,14 +1084,19 @@ ftype_register_integers(void) boolean_to_repr, /* val_to_string_repr */ boolean_repr_len, /* len_string_repr */ - NULL, /* set_value */ - set_uinteger, /* set_value_uinteger */ + NULL, /* set_value_byte_array */ + NULL, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + NULL, /* set_value_string */ + NULL, /* set_value_tvbuff */ + set_uinteger, /* set_value_uinteger */ NULL, /* set_value_sinteger */ NULL, /* set_value_integer64 */ NULL, /* set_value_floating */ NULL, /* get_value */ - get_uinteger, /* get_value_uinteger */ + get_uinteger, /* get_value_uinteger */ NULL, /* get_value_sinteger */ NULL, /* get_value_integer64 */ NULL, /* get_value_floating */ @@ -1072,14 +1127,19 @@ ftype_register_integers(void) ipxnet_to_repr, /* val_to_string_repr */ ipxnet_repr_len, /* len_string_repr */ - NULL, /* set_value */ - set_uinteger, /* set_value_uinteger */ + NULL, /* set_value_byte_array */ + NULL, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + NULL, /* set_value_string */ + NULL, /* set_value_tvbuff */ + set_uinteger, /* set_value_uinteger */ NULL, /* get_value_sinteger */ NULL, /* set_value_integer64 */ NULL, /* set_value_floating */ NULL, /* get_value */ - get_uinteger, /* get_value_uinteger */ + get_uinteger, /* get_value_uinteger */ NULL, /* get_value_sinteger */ NULL, /* get_value_integer64 */ NULL, /* get_value_floating */ @@ -1110,14 +1170,19 @@ ftype_register_integers(void) uinteger_to_repr, /* val_to_string_repr */ uinteger_repr_len, /* len_string_repr */ - NULL, /* set_value */ - set_uinteger, /* set_value_uinteger */ + NULL, /* set_value_byte_array */ + NULL, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + NULL, /* set_value_string */ + NULL, /* set_value_tvbuff */ + set_uinteger, /* set_value_uinteger */ NULL, /* set_value_sinteger */ NULL, /* set_value_integer64 */ NULL, /* set_value_floating */ NULL, /* get_value */ - get_uinteger, /* get_value_uinteger */ + get_uinteger, /* get_value_uinteger */ NULL, /* get_value_sinteger */ NULL, /* get_value_integer64 */ NULL, /* get_value_floating */ @@ -1145,10 +1210,15 @@ ftype_register_integers(void) NULL, /* free_value */ eui64_from_unparsed, /* val_from_unparsed */ NULL, /* val_from_string */ - eui64_to_repr, /* val_to_string_repr */ - eui64_repr_len, /* len_string_repr */ + eui64_to_repr, /* val_to_string_repr */ + eui64_repr_len, /* len_string_repr */ - NULL, /* set_value */ + NULL, /* set_value_byte_array */ + NULL, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + NULL, /* set_value_string */ + NULL, /* set_value_tvbuff */ NULL, /* set_value_uinteger */ NULL, /* set_value_sinteger */ set_integer64, /* set_value_integer64 */ diff --git a/epan/ftypes/ftype-ipv4.c b/epan/ftypes/ftype-ipv4.c index f3d59c4bc8..b8f70ce91a 100644 --- a/epan/ftypes/ftype-ipv4.c +++ b/epan/ftypes/ftype-ipv4.c @@ -44,13 +44,13 @@ value_get(fvalue_t *fv) } static gboolean -val_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value _U_, LogFunc logfunc) +val_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_value _U_, LogFunc logfunc) { guint32 addr; unsigned int nmask_bits; - char *has_slash; - char *net_str, *addr_str; + const char *has_slash; + const char *net_str, *addr_str; fvalue_t *nmask_fvalue; /* Look for CIDR: Is there a single slash in the string? */ @@ -178,7 +178,12 @@ ftype_register_ipv4(void) val_to_repr, /* val_to_string_repr */ val_repr_len, /* len_string_repr */ - NULL, /* set_value */ + NULL, /* set_value_byte_array */ + NULL, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + NULL, /* set_value_string */ + NULL, /* set_value_tvbuff */ set_uinteger, /* set_value_uinteger */ NULL, /* set_value_sinteger */ NULL, /* set_value_integer64 */ diff --git a/epan/ftypes/ftype-ipv6.c b/epan/ftypes/ftype-ipv6.c index 00890b6199..47a6624319 100644 --- a/epan/ftypes/ftype-ipv6.c +++ b/epan/ftypes/ftype-ipv6.c @@ -30,18 +30,16 @@ #include static void -ipv6_fvalue_set(fvalue_t *fv, gpointer value, gboolean already_copied) +ipv6_fvalue_set(fvalue_t *fv, const guint8 *value) { - g_assert(!already_copied); - memcpy(fv->value.ipv6.addr.bytes, value, FT_IPv6_LEN); fv->value.ipv6.prefix = 128; } static gboolean -ipv6_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value _U_, LogFunc logfunc) +ipv6_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_value _U_, LogFunc logfunc) { - char *has_slash, *addr_str; + const char *has_slash, *addr_str; unsigned int nmask_bits; fvalue_t *nmask_fvalue; @@ -227,7 +225,12 @@ ftype_register_ipv6(void) ipv6_to_repr, /* val_to_string_repr */ ipv6_repr_len, /* len_string_repr */ - ipv6_fvalue_set, /* set_value */ + NULL, /* set_value_byte_array */ + ipv6_fvalue_set, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + NULL, /* set_value_string */ + NULL, /* set_value_tvbuff */ NULL, /* set_value_uinteger */ NULL, /* set_value_sinteger */ NULL, /* set_value_integer64 */ diff --git a/epan/ftypes/ftype-none.c b/epan/ftypes/ftype-none.c index 956d7e9259..6359fd9929 100644 --- a/epan/ftypes/ftype-none.c +++ b/epan/ftypes/ftype-none.c @@ -41,7 +41,12 @@ ftype_register_none(void) NULL, /* val_to_string_repr */ NULL, /* len_string_repr */ - NULL, /* set_value */ + NULL, /* set_value_byte_array */ + NULL, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + NULL, /* set_value_string */ + NULL, /* set_value_tvbuff */ NULL, /* set_value_uinteger */ NULL, /* set_value_sinteger */ NULL, /* set_value_integer64 */ diff --git a/epan/ftypes/ftype-pcre.c b/epan/ftypes/ftype-pcre.c index bce9616d7e..ac2d106cd1 100644 --- a/epan/ftypes/ftype-pcre.c +++ b/epan/ftypes/ftype-pcre.c @@ -75,7 +75,7 @@ raw_flag_needed(const gchar *pattern) /* Generate a FT_PCRE from a parsed string pattern. * Uses the specified logfunc() to report errors. */ static gboolean -val_from_string(fvalue_t *fv, char *pattern, LogFunc logfunc) +val_from_string(fvalue_t *fv, const char *pattern, LogFunc logfunc) { GError *regex_error = NULL; GRegexCompileFlags cflags = G_REGEX_OPTIMIZE; @@ -113,7 +113,7 @@ val_from_string(fvalue_t *fv, char *pattern, LogFunc logfunc) /* Generate a FT_PCRE from an unparsed string pattern. * Uses the specified logfunc() to report errors. */ static gboolean -val_from_unparsed(fvalue_t *fv, char *pattern, gboolean allow_partial_value _U_, LogFunc logfunc) +val_from_unparsed(fvalue_t *fv, const char *pattern, gboolean allow_partial_value _U_, LogFunc logfunc) { g_assert(! allow_partial_value); @@ -137,13 +137,12 @@ gregex_to_repr(fvalue_t *fv, ftrepr_t rtype, char *buf) /* BEHOLD - value contains the string representation of the regular expression, * and we want to store the compiled PCRE RE object into the value. */ static void -gregex_fvalue_set(fvalue_t *fv, gpointer value, gboolean already_copied) +gregex_fvalue_set(fvalue_t *fv, const char *value) { g_assert(value != NULL); /* Free up the old value, if we have one */ gregex_fvalue_free(fv); - g_assert(! already_copied); - val_from_unparsed(fv, (char *)value, FALSE, NULL); + val_from_unparsed(fv, value, FALSE, NULL); } static gpointer @@ -167,7 +166,12 @@ ftype_register_pcre(void) gregex_to_repr, /* val_to_string_repr */ gregex_repr_len, /* len_string_repr */ - gregex_fvalue_set, /* set_value */ + NULL, /* set_value_byte_array */ + NULL, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + gregex_fvalue_set, /* set_value_string */ + NULL, /* set_value_tvbuff */ NULL, /* set_value_uinteger */ NULL, /* set_value_sinteger */ NULL, /* set_value_integer64 */ diff --git a/epan/ftypes/ftype-string.c b/epan/ftypes/ftype-string.c index db0c627960..03bb1647a5 100644 --- a/epan/ftypes/ftype-string.c +++ b/epan/ftypes/ftype-string.c @@ -45,17 +45,14 @@ string_fvalue_free(fvalue_t *fv) } static void -string_fvalue_set(fvalue_t *fv, gpointer value, gboolean already_copied) +string_fvalue_set_string(fvalue_t *fv, const gchar *value) { DISSECTOR_ASSERT(value != NULL); /* Free up the old value, if we have one */ string_fvalue_free(fv); - if (already_copied) - fv->value.string = (gchar *)value; /* must be g_ allocated */ - else - fv->value.string = (gchar *)g_strdup((const gchar *)value); + fv->value.string = (gchar *)g_strdup(value); } static int @@ -95,7 +92,7 @@ value_get(fvalue_t *fv) } static gboolean -val_from_string(fvalue_t *fv, char *s, LogFunc logfunc _U_) +val_from_string(fvalue_t *fv, const char *s, LogFunc logfunc _U_) { /* Free up the old value, if we have one */ string_fvalue_free(fv); @@ -105,7 +102,7 @@ val_from_string(fvalue_t *fv, char *s, LogFunc logfunc _U_) } static gboolean -val_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value _U_, LogFunc logfunc) +val_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_value _U_, LogFunc logfunc) { fvalue_t *fv_bytes; @@ -247,7 +244,12 @@ ftype_register_string(void) string_to_repr, /* val_to_string_repr */ string_repr_len, /* len_string_repr */ - string_fvalue_set, /* set_value */ + NULL, /* set_value_byte_array */ + NULL, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + string_fvalue_set_string, /* set_value_string */ + NULL, /* set_value_tvbuff */ NULL, /* set_value_uinteger */ NULL, /* set_value_sinteger */ NULL, /* set_value_integer64 */ @@ -284,7 +286,12 @@ ftype_register_string(void) string_to_repr, /* val_to_string_repr */ string_repr_len, /* len_string_repr */ - string_fvalue_set, /* set_value */ + NULL, /* set_value_byte_array */ + NULL, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + string_fvalue_set_string, /* set_value_string */ + NULL, /* set_value_tvbuff */ NULL, /* set_value_uinteger */ NULL, /* set_value_sinteger */ NULL, /* set_value_integer64 */ @@ -321,7 +328,12 @@ ftype_register_string(void) string_to_repr, /* val_to_string_repr */ string_repr_len, /* len_string_repr */ - string_fvalue_set, /* set_value */ + NULL, /* set_value_byte_array */ + NULL, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + string_fvalue_set_string, /* set_value_string */ + NULL, /* set_value_tvbuff */ NULL, /* set_value_uinteger */ NULL, /* set_value_sinteger */ NULL, /* set_value_integer64 */ diff --git a/epan/ftypes/ftype-time.c b/epan/ftypes/ftype-time.c index 16a946f646..e0493535ec 100644 --- a/epan/ftypes/ftype-time.c +++ b/epan/ftypes/ftype-time.c @@ -113,11 +113,11 @@ cmp_le(const fvalue_t *a, const fvalue_t *b) * Returns true on success, false on failure. */ static gboolean -get_nsecs(char *startp, int *nsecs) +get_nsecs(const char *startp, int *nsecs) { int ndigits; int scale; - char *p; + const char *p; int val; int digit; int i; @@ -171,9 +171,10 @@ get_nsecs(char *startp, int *nsecs) } static gboolean -relative_val_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value _U_, LogFunc logfunc) +relative_val_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_value _U_, LogFunc logfunc) { - char *curptr, *endptr; + const char *curptr; + char *endptr; gboolean negative = FALSE; curptr = s; @@ -236,7 +237,7 @@ fail: static gboolean -absolute_val_from_string(fvalue_t *fv, char *s, LogFunc logfunc) +absolute_val_from_string(fvalue_t *fv, const char *s, LogFunc logfunc) { struct tm tm; char *curptr; @@ -300,7 +301,7 @@ fail: } static gboolean -absolute_val_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value _U_, LogFunc logfunc) +absolute_val_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_value _U_, LogFunc logfunc) { return absolute_val_from_string(fv, s, logfunc); } @@ -313,10 +314,9 @@ time_fvalue_new(fvalue_t *fv) } static void -time_fvalue_set(fvalue_t *fv, gpointer value, gboolean already_copied) +time_fvalue_set(fvalue_t *fv, const nstime_t *value) { - g_assert(!already_copied); - memcpy(&(fv->value.time), value, sizeof(nstime_t)); + fv->value.time = *value; } static gpointer @@ -374,7 +374,12 @@ ftype_register_time(void) absolute_val_to_repr, /* val_to_string_repr */ absolute_val_repr_len, /* len_string_repr */ - time_fvalue_set, /* set_value */ + NULL, /* set_value_byte_array */ + NULL, /* set_value_bytes */ + NULL, /* set_value_guid */ + time_fvalue_set, /* set_value_time */ + NULL, /* set_value_string */ + NULL, /* set_value_tvbuff */ NULL, /* set_value_uinteger */ NULL, /* set_value_sinteger */ NULL, /* set_value_integer64 */ @@ -411,7 +416,12 @@ ftype_register_time(void) relative_val_to_repr, /* val_to_string_repr */ relative_val_repr_len, /* len_string_repr */ - time_fvalue_set, /* set_value */ + NULL, /* set_value_byte_array */ + NULL, /* set_value_bytes */ + NULL, /* set_value_guid */ + time_fvalue_set, /* set_value_time */ + NULL, /* set_value_string */ + NULL, /* set_value_tvbuff */ NULL, /* set_value_uinteger */ NULL, /* set_value_sinteger */ NULL, /* set_value_integer64 */ diff --git a/epan/ftypes/ftype-tvbuff.c b/epan/ftypes/ftype-tvbuff.c index e7bacae062..83fa643f01 100644 --- a/epan/ftypes/ftype-tvbuff.c +++ b/epan/ftypes/ftype-tvbuff.c @@ -48,14 +48,12 @@ value_free(fvalue_t *fv) } static void -value_set(fvalue_t *fv, gpointer value, gboolean already_copied) +value_set(fvalue_t *fv, tvbuff_t *value) { - g_assert(already_copied); - /* Free up the old value, if we have one */ value_free(fv); - fv->value.tvb = (tvbuff_t *)value; + fv->value.tvb = value; } static void @@ -65,7 +63,7 @@ free_tvb_data(void *data) } static gboolean -val_from_string(fvalue_t *fv, char *s, LogFunc logfunc _U_) +val_from_string(fvalue_t *fv, const char *s, LogFunc logfunc _U_) { tvbuff_t *new_tvb; guint8 *private_data; @@ -89,7 +87,7 @@ val_from_string(fvalue_t *fv, char *s, LogFunc logfunc _U_) } static gboolean -val_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value _U_, LogFunc logfunc) +val_from_unparsed(fvalue_t *fv, const char *s, gboolean allow_partial_value _U_, LogFunc logfunc) { fvalue_t *fv_bytes; tvbuff_t *new_tvb; @@ -429,7 +427,12 @@ ftype_register_tvbuff(void) val_to_repr, /* val_to_string_repr */ val_repr_len, /* len_string_repr */ - value_set, /* set_value */ + NULL, /* set_value_byte_array */ + NULL, /* set_value_bytes */ + NULL, /* set_value_guid */ + NULL, /* set_value_time */ + NULL, /* set_value_string */ + value_set, /* set_value_tvbuff */ NULL, /* set_value_uinteger */ NULL, /* set_value_sinteger */ NULL, /* set_value_integer64 */ diff --git a/epan/ftypes/ftypes-int.h b/epan/ftypes/ftypes-int.h index cdc19c546f..fb4ae31a36 100644 --- a/epan/ftypes/ftypes-int.h +++ b/epan/ftypes/ftypes-int.h @@ -49,12 +49,17 @@ void ftype_register_pcre(void); typedef void (*FvalueNewFunc)(fvalue_t*); typedef void (*FvalueFreeFunc)(fvalue_t*); -typedef gboolean (*FvalueFromUnparsed)(fvalue_t*, char*, gboolean, LogFunc); -typedef gboolean (*FvalueFromString)(fvalue_t*, char*, LogFunc); +typedef gboolean (*FvalueFromUnparsed)(fvalue_t*, const char*, gboolean, LogFunc); +typedef gboolean (*FvalueFromString)(fvalue_t*, const char*, LogFunc); typedef void (*FvalueToStringRepr)(fvalue_t*, ftrepr_t, char*volatile); typedef int (*FvalueStringReprLen)(fvalue_t*, ftrepr_t); -typedef void (*FvalueSetFunc)(fvalue_t*, gpointer, gboolean); +typedef void (*FvalueSetByteArrayFunc)(fvalue_t*, GByteArray *); +typedef void (*FvalueSetBytesFunc)(fvalue_t*, const guint8 *); +typedef void (*FvalueSetGuidFunc)(fvalue_t*, const e_guid_t *); +typedef void (*FvalueSetTimeFunc)(fvalue_t*, const nstime_t *); +typedef void (*FvalueSetStringFunc)(fvalue_t*, const gchar *value); +typedef void (*FvalueSetTvbuffFunc)(fvalue_t*, tvbuff_t *value); typedef void (*FvalueSetUnsignedIntegerFunc)(fvalue_t*, guint32); typedef void (*FvalueSetSignedIntegerFunc)(fvalue_t*, gint32); typedef void (*FvalueSetInteger64Func)(fvalue_t*, guint64); @@ -84,7 +89,12 @@ struct _ftype_t { FvalueStringReprLen len_string_repr; /* could be union */ - FvalueSetFunc set_value; + FvalueSetByteArrayFunc set_value_byte_array; + FvalueSetBytesFunc set_value_bytes; + FvalueSetGuidFunc set_value_guid; + FvalueSetTimeFunc set_value_time; + FvalueSetStringFunc set_value_string; + FvalueSetTvbuffFunc set_value_tvbuff; FvalueSetUnsignedIntegerFunc set_value_uinteger; FvalueSetSignedIntegerFunc set_value_sinteger; FvalueSetInteger64Func set_value_integer64; diff --git a/epan/ftypes/ftypes.c b/epan/ftypes/ftypes.c index a409c9ce1e..2ea1428746 100644 --- a/epan/ftypes/ftypes.c +++ b/epan/ftypes/ftypes.c @@ -227,7 +227,7 @@ fvalue_init(fvalue_t *fv, ftenum_t ftype) } fvalue_t* -fvalue_from_unparsed(ftenum_t ftype, char *s, gboolean allow_partial_value, LogFunc logfunc) +fvalue_from_unparsed(ftenum_t ftype, const char *s, gboolean allow_partial_value, LogFunc logfunc) { fvalue_t *fv; @@ -246,7 +246,7 @@ fvalue_from_unparsed(ftenum_t ftype, char *s, gboolean allow_partial_value, LogF } fvalue_t* -fvalue_from_string(ftenum_t ftype, char *s, LogFunc logfunc) +fvalue_from_string(ftenum_t ftype, const char *s, LogFunc logfunc) { fvalue_t *fv; @@ -408,16 +408,51 @@ fvalue_slice(fvalue_t *fv, drange_t *d_range) drange_foreach_drange_node(d_range, slice_func, &slice_data); new_fv = fvalue_new(FT_BYTES); - fvalue_set(new_fv, slice_data.bytes, TRUE); + fvalue_set_byte_array(new_fv, slice_data.bytes); return new_fv; } void -fvalue_set(fvalue_t *fv, gpointer value, gboolean already_copied) +fvalue_set_byte_array(fvalue_t *fv, GByteArray *value) { - g_assert(fv->ftype->set_value); - fv->ftype->set_value(fv, value, already_copied); + g_assert(fv->ftype->set_value_byte_array); + fv->ftype->set_value_byte_array(fv, value); +} + +void +fvalue_set_bytes(fvalue_t *fv, const guint8 *value) +{ + g_assert(fv->ftype->set_value_bytes); + fv->ftype->set_value_bytes(fv, value); +} + +void +fvalue_set_guid(fvalue_t *fv, const e_guid_t *value) +{ + g_assert(fv->ftype->set_value_guid); + fv->ftype->set_value_guid(fv, value); +} + +void +fvalue_set_time(fvalue_t *fv, const nstime_t *value) +{ + g_assert(fv->ftype->set_value_time); + fv->ftype->set_value_time(fv, value); +} + +void +fvalue_set_string(fvalue_t *fv, const gchar *value) +{ + g_assert(fv->ftype->set_value_string); + fv->ftype->set_value_string(fv, value); +} + +void +fvalue_set_tvbuff(fvalue_t *fv, tvbuff_t *value) +{ + g_assert(fv->ftype->set_value_tvbuff); + fv->ftype->set_value_tvbuff(fv, value); } void diff --git a/epan/ftypes/ftypes.h b/epan/ftypes/ftypes.h index 05bd42513e..dcfeb0b3f3 100644 --- a/epan/ftypes/ftypes.h +++ b/epan/ftypes/ftypes.h @@ -208,10 +208,10 @@ fvalue_init(fvalue_t *fv, ftenum_t ftype); WS_DLL_PUBLIC fvalue_t* -fvalue_from_unparsed(ftenum_t ftype, char *s, gboolean allow_partial_value, LogFunc logfunc); +fvalue_from_unparsed(ftenum_t ftype, const char *s, gboolean allow_partial_value, LogFunc logfunc); fvalue_t* -fvalue_from_string(ftenum_t ftype, char *s, LogFunc logfunc); +fvalue_from_string(ftenum_t ftype, const char *s, LogFunc logfunc); /* Returns the length of the string required to hold the * string representation of the the field value. @@ -243,7 +243,22 @@ const char* fvalue_type_name(fvalue_t *fv); void -fvalue_set(fvalue_t *fv, gpointer value, gboolean already_copied); +fvalue_set_byte_array(fvalue_t *fv, GByteArray *value); + +void +fvalue_set_bytes(fvalue_t *fv, const guint8 *value); + +void +fvalue_set_guid(fvalue_t *fv, const e_guid_t *value); + +void +fvalue_set_time(fvalue_t *fv, const nstime_t *value); + +void +fvalue_set_string(fvalue_t *fv, const gchar *value); + +void +fvalue_set_tvbuff(fvalue_t *fv, tvbuff_t *value); void fvalue_set_uinteger(fvalue_t *fv, guint32 value); diff --git a/epan/proto.c b/epan/proto.c index f8f86794a5..2284227345 100644 --- a/epan/proto.c +++ b/epan/proto.c @@ -180,7 +180,7 @@ proto_tree_set_bytes(field_info *fi, const guint8* start_ptr, gint length); static void proto_tree_set_bytes_tvb(field_info *fi, tvbuff_t *tvb, gint offset, gint length); static void -proto_tree_set_time(field_info *fi, nstime_t *value_ptr); +proto_tree_set_time(field_info *fi, const nstime_t *value_ptr); static void proto_tree_set_string(field_info *fi, const char* value); static void @@ -1990,7 +1990,7 @@ ptvcursor_advance(ptvcursor_t* ptvc, gint length) static void proto_tree_set_protocol_tvb(field_info *fi, tvbuff_t *tvb) { - fvalue_set(&fi->value, tvb, TRUE); + fvalue_set_tvbuff(&fi->value, tvb); } /* Add a FT_PROTOCOL to a proto_tree */ @@ -2102,7 +2102,7 @@ proto_tree_set_bytes(field_info *fi, const guint8* start_ptr, gint length) if (length > 0) { g_byte_array_append(bytes, start_ptr, length); } - fvalue_set(&fi->value, bytes, TRUE); + fvalue_set_byte_array(&fi->value, bytes); } @@ -2115,7 +2115,7 @@ proto_tree_set_bytes_tvb(field_info *fi, tvbuff_t *tvb, gint offset, gint length /* Add a FT_*TIME to a proto_tree */ proto_item * proto_tree_add_time(proto_tree *tree, int hfindex, tvbuff_t *tvb, gint start, - gint length, nstime_t *value_ptr) + gint length, const nstime_t *value_ptr) { proto_item *pi; header_field_info *hfinfo; @@ -2171,11 +2171,11 @@ proto_tree_add_time_format(proto_tree *tree, int hfindex, tvbuff_t *tvb, /* Set the FT_*TIME value */ static void -proto_tree_set_time(field_info *fi, nstime_t *value_ptr) +proto_tree_set_time(field_info *fi, const nstime_t *value_ptr) { DISSECTOR_ASSERT(value_ptr != NULL); - fvalue_set(&fi->value, value_ptr, FALSE); + fvalue_set_time(&fi->value, value_ptr); } /* Add a FT_IPXNET to a proto_tree */ @@ -2366,7 +2366,7 @@ static void proto_tree_set_ipv6(field_info *fi, const guint8* value_ptr) { DISSECTOR_ASSERT(value_ptr != NULL); - fvalue_set(&fi->value, (gpointer) value_ptr, FALSE); + fvalue_set_bytes(&fi->value, value_ptr); } static void @@ -2437,7 +2437,7 @@ static void proto_tree_set_guid(field_info *fi, const e_guid_t *value_ptr) { DISSECTOR_ASSERT(value_ptr != NULL); - fvalue_set(&fi->value, (gpointer) value_ptr, FALSE); + fvalue_set_guid(&fi->value, value_ptr); } static void @@ -2519,7 +2519,7 @@ proto_tree_set_oid(field_info *fi, const guint8* value_ptr, gint length) if (length > 0) { g_byte_array_append(bytes, value_ptr, length); } - fvalue_set(&fi->value, bytes, TRUE); + fvalue_set_byte_array(&fi->value, bytes); } static void @@ -2540,7 +2540,7 @@ proto_tree_set_system_id(field_info *fi, const guint8* value_ptr, gint length) if (length > 0) { g_byte_array_append(bytes, value_ptr, length); } - fvalue_set(&fi->value, bytes, TRUE); + fvalue_set_byte_array(&fi->value, bytes); } static void @@ -2769,7 +2769,7 @@ proto_item_append_string(proto_item *pi, const char *str) new_str = ep_strconcat(old_str, str, NULL); else new_str = str; - fvalue_set(&fi->value, (gpointer) new_str, FALSE); + fvalue_set_string(&fi->value, new_str); } /* Set the FT_STRING value */ @@ -2777,9 +2777,9 @@ static void proto_tree_set_string(field_info *fi, const char* value) { if (value) { - fvalue_set(&fi->value, (gpointer) value, FALSE); + fvalue_set_string(&fi->value, value); } else { - fvalue_set(&fi->value, (gpointer) "[ Null ]", FALSE); + fvalue_set_string(&fi->value, "[ Null ]"); } } @@ -2819,7 +2819,7 @@ proto_tree_add_ax25(proto_tree *tree, int hfindex, tvbuff_t *tvb, gint start, gi static void proto_tree_set_ax25(field_info *fi, const guint8* value) { - fvalue_set(&fi->value, (gpointer) value, FALSE); + fvalue_set_bytes(&fi->value, value); } static void @@ -2832,7 +2832,7 @@ proto_tree_set_ax25_tvb(field_info *fi, tvbuff_t *tvb, gint start) static void proto_tree_set_vines(field_info *fi, const guint8* value) { - fvalue_set(&fi->value, (gpointer) value, FALSE); + fvalue_set_bytes(&fi->value, value); } static void @@ -2901,7 +2901,7 @@ proto_tree_add_ether_format(proto_tree *tree, int hfindex, tvbuff_t *tvb, static void proto_tree_set_ether(field_info *fi, const guint8* value) { - fvalue_set(&fi->value, (gpointer) value, FALSE); + fvalue_set_bytes(&fi->value, value); } static void @@ -4379,7 +4379,7 @@ proto_item_add_subtree(proto_item *pi, const gint idx) { } proto_tree * -proto_item_get_subtree(const proto_item *pi) { +proto_item_get_subtree(proto_item *pi) { field_info *fi; if (!pi) @@ -4411,7 +4411,7 @@ proto_item_get_parent_nth(proto_item *ti, int gen) { proto_item * -proto_tree_get_parent(const proto_tree *tree) { +proto_tree_get_parent(proto_tree *tree) { if (!tree) return NULL; return (proto_item *)tree; @@ -4503,10 +4503,11 @@ int proto_register_protocol(const char *name, const char *short_name, const char *filter_name) { - protocol_t *protocol, *existing_protocol = NULL; + protocol_t *protocol; + const protocol_t *existing_protocol = NULL; header_field_info *hfinfo; int proto_id; - char *existing_name; + const char *existing_name; gint *key; guint i; guchar c; @@ -4531,7 +4532,7 @@ proto_register_protocol(const char *name, const char *short_name, key = (gint *)g_malloc (sizeof(gint)); *key = wrs_str_hash(name); - existing_name = (char *)g_hash_table_lookup(proto_names, key); + existing_name = (const char *)g_hash_table_lookup(proto_names, key); if (existing_name != NULL) { /* g_error will terminate the program */ g_error("Duplicate protocol name \"%s\"!" @@ -4539,7 +4540,7 @@ proto_register_protocol(const char *name, const char *short_name, } g_hash_table_insert(proto_names, key, (gpointer)name); - existing_name = (char *)g_hash_table_lookup(proto_short_names, (gpointer)short_name); + existing_name = (const char *)g_hash_table_lookup(proto_short_names, (gpointer)short_name); if (existing_name != NULL) { g_error("Duplicate protocol short_name \"%s\"!" " This might be caused by an inappropriate plugin or a development error.", short_name); @@ -4558,7 +4559,7 @@ proto_register_protocol(const char *name, const char *short_name, " Allowed are lower characters, digits, '-', '_' and '.'." " This might be caused by an inappropriate plugin or a development error.", filter_name); } - existing_protocol = (protocol_t *)g_hash_table_lookup(proto_filter_names, (gpointer)filter_name); + existing_protocol = (const protocol_t *)g_hash_table_lookup(proto_filter_names, (gpointer)filter_name); if (existing_protocol != NULL) { g_error("Duplicate protocol filter_name \"%s\"!" " This might be caused by an inappropriate plugin or a development error.", filter_name); @@ -4701,14 +4702,14 @@ proto_get_id(const protocol_t *protocol) int proto_get_id_by_filter_name(const gchar* filter_name) { - protocol_t *protocol = NULL; + const protocol_t *protocol = NULL; if(!filter_name){ fprintf(stderr, "No filter name present"); DISSECTOR_ASSERT(filter_name); } - protocol = (protocol_t *)g_hash_table_lookup(proto_filter_names, (gpointer)filter_name); + protocol = (const protocol_t *)g_hash_table_lookup(proto_filter_names, (gpointer)filter_name); if (protocol == NULL) return -1; diff --git a/epan/proto.h b/epan/proto.h index 4b4053284f..bb573ad11a 100644 --- a/epan/proto.h +++ b/epan/proto.h @@ -659,7 +659,7 @@ WS_DLL_PUBLIC proto_tree* proto_item_add_subtree(proto_item *ti, const gint idx) /** Get an existing subtree under an item. @param ti the parent item of the subtree @return the subtree or NULL */ -WS_DLL_PUBLIC proto_tree* proto_item_get_subtree(const proto_item *ti); +WS_DLL_PUBLIC proto_tree* proto_item_get_subtree(proto_item *ti); /** Get the parent of a subtree item. @param ti the child item in the subtree @@ -754,7 +754,7 @@ proto_tree_prime_hfid(proto_tree *tree, const int hfid); /** Get a parent item of a subtree. @param tree the tree to get the parent from @return parent item */ -WS_DLL_PUBLIC proto_item* proto_tree_get_parent(const proto_tree *tree); +WS_DLL_PUBLIC proto_item* proto_tree_get_parent(proto_tree *tree); /** Get the root tree from any subtree. @param tree the tree to get the root from @@ -901,7 +901,7 @@ proto_tree_add_bytes_format(proto_tree *tree, int hfindex, tvbuff_t *tvb, gint s @return the newly created item */ WS_DLL_PUBLIC proto_item * proto_tree_add_time(proto_tree *tree, int hfindex, tvbuff_t *tvb, gint start, - gint length, nstime_t* value_ptr); + gint length, const nstime_t* value_ptr); /** Add a formatted FT_ABSOLUTE_TIME or FT_RELATIVE_TIME to a proto_tree, with the format generating the string for the value and with the field name