diff options
author | Michael Mann <mmann78@netscape.net> | 2017-06-21 23:58:50 -0400 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2017-06-22 13:07:11 +0000 |
commit | 29e726a606a5bb7b860d8a2f6ee2996c1b4a154e (patch) | |
tree | 361782ab965df7283993ebb45f035bb471b221fc /epan/uat.c | |
parent | 9fe90b93ce9bbb802f45b93632a78f5261b3f717 (diff) |
Add support for "bool" and "display filter" types for UATs.
Filter expressions needs support for a checkbox (bool) and
string field that verifies display filters.
Change-Id: Idfbffd6cdb5abaee8914126a05d890e834c17306
Reviewed-on: https://code.wireshark.org/review/22340
Petri-Dish: Michael Mann <mmann78@netscape.net>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'epan/uat.c')
-rw-r--r-- | epan/uat.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/epan/uat.c b/epan/uat.c index 3c1a0ec7dc..71403485b7 100644 --- a/epan/uat.c +++ b/epan/uat.c @@ -273,8 +273,10 @@ char *uat_fld_tostr(void *rec, uat_field_t *f) { case PT_TXTMOD_NONE: case PT_TXTMOD_STRING: case PT_TXTMOD_ENUM: + case PT_TXTMOD_BOOL: case PT_TXTMOD_FILENAME: case PT_TXTMOD_DIRECTORYNAME: + case PT_TXTMOD_DISPLAY_FILTER: out = g_strndup(ptr, len); break; case PT_TXTMOD_HEXBYTES: { @@ -309,6 +311,7 @@ static void putfld(FILE* fp, void* rec, uat_field_t* f) { case PT_TXTMOD_ENUM: case PT_TXTMOD_FILENAME: case PT_TXTMOD_DIRECTORYNAME: + case PT_TXTMOD_DISPLAY_FILTER: case PT_TXTMOD_STRING: { guint i; @@ -336,6 +339,10 @@ static void putfld(FILE* fp, void* rec, uat_field_t* f) { break; } + case PT_TXTMOD_BOOL: { + fprintf(fp,"\"%s\"", fld_ptr); + break; + } default: g_assert_not_reached(); } @@ -633,13 +640,30 @@ gboolean uat_fld_chk_num_hex(void* u1 _U_, const char* strptr, guint len, const return uat_fld_chk_num(16, strptr, len, err); } +gboolean uat_fld_chk_bool(void* u1 _U_, const char* strptr, guint len, const void* u2 _U_, const void* u3 _U_, char** err) +{ + char* str = g_strndup(strptr,len); + + if ((g_strcmp0(str, "TRUE") == 0) || + (g_strcmp0(str, "FALSE") == 0)) { + *err = NULL; + g_free(str); + return TRUE; + } + + *err = g_strdup_printf("invalid value: %s (must be TRUE or FALSE)", str); + g_free(str); + return FALSE; +} + + gboolean uat_fld_chk_enum(void* u1 _U_, const char* strptr, guint len, const void* v, const void* u3 _U_, char** err) { char* str = g_strndup(strptr,len); guint i; const value_string* vs = (const value_string *)v; for(i=0;vs[i].strptr;i++) { - if (g_str_equal(vs[i].strptr,str)) { + if (g_strcmp0(vs[i].strptr,str) == 0) { *err = NULL; g_free(str); return TRUE; |