Give FT_ABSOLUTE_TIME and FT_RELATIVE_TIME val_repr_len and val_to_repr

methods, and use them when constructing display filters.

svn path=/trunk/; revision=8107
This commit is contained in:
Guy Harris 2003-07-30 22:50:39 +00:00
parent 325203fb17
commit b37514b435
2 changed files with 39 additions and 37 deletions

View File

@ -1,5 +1,5 @@
/*
* $Id: ftype-time.c,v 1.19 2003/07/25 03:44:03 gram Exp $
* $Id: ftype-time.c,v 1.20 2003/07/30 22:50:39 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@ -296,6 +296,36 @@ value_get(fvalue_t *fv)
{
return &(fv->value.time);
}
static int
absolute_val_repr_len(fvalue_t *fv, ftrepr_t rtype _U_)
{
gchar *rep;
rep = abs_time_to_str(&fv->value.time);
return strlen(rep) + 2; /* 2 for opening and closing quotes */
}
static void
absolute_val_to_repr(fvalue_t *fv, ftrepr_t rtype _U_, char *buf)
{
sprintf(buf, "\"%s\"", abs_time_to_str(&fv->value.time));
}
static int
relative_val_repr_len(fvalue_t *fv, ftrepr_t rtype _U_)
{
gchar *rep;
rep = rel_time_to_secs_str(&fv->value.time);
return strlen(rep);
}
static void
relative_val_to_repr(fvalue_t *fv, ftrepr_t rtype _U_, char *buf)
{
strcpy(buf, rel_time_to_secs_str(&fv->value.time));
}
void
ftype_register_time(void)
@ -309,8 +339,8 @@ ftype_register_time(void)
NULL,
absolute_val_from_string, /* val_from_unparsed */
absolute_val_from_string, /* val_from_string */
NULL, /* val_to_string_repr */
NULL, /* len_string_repr */
absolute_val_to_repr, /* val_to_string_repr */
absolute_val_repr_len, /* len_string_repr */
time_fvalue_set,
NULL,
@ -337,8 +367,8 @@ ftype_register_time(void)
NULL,
relative_val_from_unparsed, /* val_from_unparsed */
NULL, /* val_from_string */
NULL, /* val_to_string_repr */
NULL, /* len_string_repr */
relative_val_to_repr, /* val_to_string_repr */
relative_val_repr_len, /* len_string_repr */
time_fvalue_set,
NULL,

View File

@ -1,7 +1,7 @@
/* proto.c
* Routines for protocol tree
*
* $Id: proto.c,v 1.95 2003/07/07 20:29:45 guy Exp $
* $Id: proto.c,v 1.96 2003/07/30 22:50:39 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@ -3481,7 +3481,7 @@ proto_construct_dfilter_string(field_info *finfo, epan_dissect_t *edt)
{
header_field_info *hfinfo;
int abbrev_len;
char *buf, *stringified, *format, *ptr, *value_str;
char *buf, *stringified, *format, *ptr;
int dfilter_len, i;
gint start, length;
guint8 c;
@ -3644,42 +3644,14 @@ proto_construct_dfilter_string(field_info *finfo, epan_dissect_t *edt)
fvalue_get_floating(finfo->value));
break;
case FT_ABSOLUTE_TIME:
/*
* 4 bytes for " == ".
* N bytes for the string for the time.
* 2 bytes for the opening and closing quotes.
* 1 byte for the trailing '\0'.
*/
value_str =
abs_time_to_str((nstime_t *)fvalue_get(finfo->value));
dfilter_len = abbrev_len + strlen(value_str) + 4 + 2 + 1;
buf = g_malloc0(dfilter_len);
snprintf(buf, dfilter_len, "%s == \"%s\"",
hfinfo->abbrev, value_str);
break;
case FT_RELATIVE_TIME:
/*
* 4 bytes for " == ".
* N bytes for the string for the time.
* 1 byte for the trailing '\0'.
*/
value_str =
rel_time_to_secs_str((nstime_t *)fvalue_get(finfo->value));
dfilter_len = abbrev_len + strlen(value_str) + 4 + 1;
buf = g_malloc0(dfilter_len);
snprintf(buf, dfilter_len, "%s == %s",
hfinfo->abbrev, value_str);
break;
/* These use the fvalue's "to_string_repr" method. */
case FT_BOOLEAN:
case FT_STRING:
case FT_ETHER:
case FT_BYTES:
case FT_UINT_BYTES:
case FT_ABSOLUTE_TIME:
case FT_RELATIVE_TIME:
/* Figure out the string length needed.
* The ft_repr length.
* 4 bytes for " == ".