From 22f989674aa4b255d48a3164212d5a878c102ab2 Mon Sep 17 00:00:00 2001 From: hagbard Date: Sun, 1 Apr 2001 03:18:41 +0000 Subject: Moved the value_string structures and function from packet.{c,h} into a separate value_string.{c,h}. git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@3221 f5534014-38df-0310-8fa8-9805f1628bb7 --- epan/value_string.c | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 epan/value_string.c (limited to 'epan/value_string.c') diff --git a/epan/value_string.c b/epan/value_string.c new file mode 100644 index 0000000000..66e0150e66 --- /dev/null +++ b/epan/value_string.c @@ -0,0 +1,90 @@ +/* value_string.c + * Routines for value_strings + * + * $Id: value_string.c,v 1.1 2001/04/01 03:18:41 hagbard Exp $ + * + * Ethereal - Network traffic analyzer + * By Gerald Combs + * Copyright 1998 Gerald Combs + * + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#ifdef NEED_SNPRINTF_H +# include "snprintf.h" +#endif +#include "to_str.h" +#include "value_string.h" + +/* Tries to match val against each element in the value_string array vs. + Returns the associated string ptr on a match. + Formats val with fmt, and returns the resulting string, on failure. */ +gchar* +val_to_str(guint32 val, const value_string *vs, const char *fmt) { + gchar *ret; + static gchar str[3][64]; + static gchar *cur; + + ret = match_strval(val, vs); + if (ret != NULL) + return ret; + if (cur == &str[0][0]) { + cur = &str[1][0]; + } else if (cur == &str[1][0]) { + cur = &str[2][0]; + } else { + cur = &str[0][0]; + } + snprintf(cur, 64, fmt, val); + return cur; +} + +/* Tries to match val against each element in the value_string array vs. + Returns the associated string ptr on a match, or NULL on failure. */ +gchar* +match_strval(guint32 val, const value_string *vs) { + gint i = 0; + + while (vs[i].strptr) { + if (vs[i].value == val) + return(vs[i].strptr); + i++; + } + + return(NULL); +} + +/* Generate a string describing an enumerated bitfield (an N-bit field + with various specific values having particular names). */ +const char * +decode_enumerated_bitfield(guint32 val, guint32 mask, int width, + const value_string *tab, const char *fmt) +{ + static char buf[1025]; + char *p; + + p = decode_bitfield_value(buf, val, mask, width); + sprintf(p, fmt, val_to_str(val & mask, tab, "Unknown")); + return buf; +} + + -- cgit v1.2.3