diff options
author | Evan Huus <eapache@gmail.com> | 2013-10-13 16:10:43 +0000 |
---|---|---|
committer | Evan Huus <eapache@gmail.com> | 2013-10-13 16:10:43 +0000 |
commit | ee6916b838f68b21c762293ad46390b5a137c964 (patch) | |
tree | 8c423ddb714f4862ee4f825302c06f824a7ca931 /epan/print.c | |
parent | 4e50b8bf973a6e1b3a05773753cbce850e36041d (diff) |
When printing PDML, don't assume that all values with bitmasks are represented
as guint32 internally - they may be signed and/or 64-bit.
svn path=/trunk/; revision=52587
Diffstat (limited to 'epan/print.c')
-rw-r--r-- | epan/print.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/epan/print.c b/epan/print.c index 6aa353f9ea..01a8708e52 100644 --- a/epan/print.c +++ b/epan/print.c @@ -30,6 +30,7 @@ #include <string.h> #include <glib.h> +#include <glib/gprintf.h> #include <epan/epan.h> #include <epan/epan_dissect.h> @@ -457,7 +458,28 @@ proto_tree_write_node_pdml(proto_node *node, gpointer data) fputs("\" value=\"", pdata->fh); if (fi->hfinfo->bitmask!=0) { - fprintf(pdata->fh, "%X", fvalue_get_uinteger(&fi->value)); + switch (fi->value.ftype->ftype) { + case FT_INT8: + case FT_INT16: + case FT_INT24: + case FT_INT32: + fprintf(pdata->fh, "%X", (guint) fvalue_get_sinteger(&fi->value)); + break; + case FT_UINT8: + case FT_UINT16: + case FT_UINT24: + case FT_UINT32: + case FT_BOOLEAN: + fprintf(pdata->fh, "%X", fvalue_get_uinteger(&fi->value)); + break; + case FT_INT64: + case FT_UINT64: + g_fprintf(pdata->fh, "%" G_GINT64_MODIFIER "X", + fvalue_get_integer64(&fi->value)); + break; + default: + g_assert_not_reached(); + } fputs("\" unmaskedvalue=\"", pdata->fh); write_pdml_field_hex_value(pdata, fi); } |