diff options
author | Michael Mann <mmann78@netscape.net> | 2013-12-01 15:44:22 +0000 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2013-12-01 15:44:22 +0000 |
commit | 0c9aa51ec532fec52a91c3b8d871e02087ee772f (patch) | |
tree | 7020bc97fff5778aaf1ed692c60f78e55f29c270 /epan | |
parent | 98c8454dd635fb96a638839c9956a96bdfe76152 (diff) |
Patch to include YAML export. Bug 9452 (https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9452)
From Deon van der Westhuysen
From me: use switch statements instead of if-else
svn path=/trunk/; revision=53698
Diffstat (limited to 'epan')
-rw-r--r-- | epan/stats_tree.c | 63 | ||||
-rw-r--r-- | epan/stats_tree_priv.h | 10 |
2 files changed, 52 insertions, 21 deletions
diff --git a/epan/stats_tree.c b/epan/stats_tree.c index 39928ff5f2..7498dfb491 100644 --- a/epan/stats_tree.c +++ b/epan/stats_tree.c @@ -1100,7 +1100,7 @@ stats_tree_get_column_size (gint col_index) return 36; /* but caller should really call stats_tree_branch_max_namelen() */ } if (col_index<N_COLUMNS) { - return 12; /* all numerica values this size */ + return 12; /* all numerical values are this size */ } return 0; /* invalid column */ } @@ -1250,17 +1250,23 @@ stats_tree_format_as_str(const stats_tree* st, st_format_type format_type, int count; gchar *separator = NULL; - if (format_type==ST_FORMAT_XML) { + switch(format_type) + { + case ST_FORMAT_YAML: + s = g_string_new("---\n"); + break; + case ST_FORMAT_XML: s = g_string_new("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n"); - } - else if (format_type==ST_FORMAT_CSV) { + break; + case ST_FORMAT_CSV: s = g_string_new("\"level\",\"parent\","); for (count = 0; count<st->num_columns; count++) { g_string_append_printf(s,"\"%s\",",stats_tree_get_column_name(count)); } g_string_append (s,"\n"); - } - else if (format_type==ST_FORMAT_PLAIN) { + break; + case ST_FORMAT_PLAIN: + { char fmt[16]; int sep_length; @@ -1283,8 +1289,9 @@ stats_tree_format_as_str(const stats_tree* st, st_format_type format_type, } memset (separator, '-', sep_length); g_string_append_printf(s,"\n%s\n",separator); - } - else { + } + break; + default: return g_string_new("unknown format for stats_tree\n"); } @@ -1367,30 +1374,53 @@ WS_DLL_PUBLIC void stats_tree_format_node_as_str(const stat_node *node, stat_node *child; sortinfo si; gchar *full_path; + char fmt[16]; - if (format_type==ST_FORMAT_XML) { + switch(format_type) + { + case ST_FORMAT_YAML: + if (indent) { + g_sprintf(fmt, "%%%ds%%s%%s", indent*4-2); + } + else { + strcpy(fmt, "%s%s%s"); + } + g_string_append_printf(s, fmt, "", indent?"- ":"", "Description"); + g_string_append_printf(s, ": \"%s\"\n", values[0]); + + for (count = 1; count<num_columns; count++) { + if (*values[count]) { + g_string_append_printf(s, fmt, "", indent?" ":"", + stats_tree_get_column_name(count)); + g_string_append_printf(s, ": %s\n", values[count]); + } + } + if (node->children) { + g_string_append_printf(s, fmt, "", indent?" ":"", "Items:\n"); + } + break; + case ST_FORMAT_XML: + { GString *itemname= escape_xml_chars(values[0]); g_string_append_printf(s,"<stat-node name=\"%s\"%s>\n",itemname->str, node->rng?" isrange=\"true\"":""); g_string_free(itemname,TRUE); - g_string_append(s,""); for (count = 1; count<num_columns; count++) { gchar *colname= g_strdup(stats_tree_get_column_name(count)); g_string_append_printf(s,"<%s>",clean_for_xml_tag(colname)); g_string_append_printf(s,"%s</%s>\n",values[count],colname); g_free(colname); } - } - else if (format_type==ST_FORMAT_CSV) { + } + break; + case ST_FORMAT_CSV: g_string_append_printf(s,"%d,\"%s\",\"%s\"",indent,path,values[0]); for (count = 1; count<num_columns; count++) { g_string_append_printf(s,",%s",values[count]); } g_string_append (s,"\n"); - } - else if (format_type==ST_FORMAT_PLAIN) { - char fmt[16]; - + break; + case ST_FORMAT_PLAIN: g_sprintf (fmt,"%%%ds%%-%us",indent,maxnamelen-indent); g_string_append_printf(s,fmt,"",values[0]); for (count = 1; count<num_columns; count++) { @@ -1398,6 +1428,7 @@ WS_DLL_PUBLIC void stats_tree_format_node_as_str(const stat_node *node, g_string_append_printf(s,fmt,values[count]); } g_string_append (s,"\n"); + break; } indent++; diff --git a/epan/stats_tree_priv.h b/epan/stats_tree_priv.h index 3dbba7bb6f..489beb1c5e 100644 --- a/epan/stats_tree_priv.h +++ b/epan/stats_tree_priv.h @@ -243,10 +243,6 @@ WS_DLL_PUBLIC guint stats_tree_branch_max_namelen(const stat_node *node, guint i WS_DLL_PUBLIC gchar *stats_tree_node_to_str(const stat_node *node, gchar *buffer, guint len); -#ifdef __cplusplus -} -#endif /* __cplusplus */ - /** get the display name for the stats_tree (or node name) based on the st_sort_showfullname preference. If not set remove everything before last unescaped backslash. Caller must free the result */ @@ -283,7 +279,7 @@ WS_DLL_PUBLIC gint stat_node_array_sortcmp (gconstpointer a, gpointer user_data); /** function to copy stats_tree into GString. format deternmines output format */ -typedef enum { ST_FORMAT_PLAIN, ST_FORMAT_CSV, ST_FORMAT_XML} st_format_type; +typedef enum { ST_FORMAT_PLAIN, ST_FORMAT_CSV, ST_FORMAT_XML, ST_FORMAT_YAML} st_format_type; WS_DLL_PUBLIC GString* stats_tree_format_as_str(const stats_tree* st, guint format, gint sort_column, @@ -299,4 +295,8 @@ WS_DLL_PUBLIC void stats_tree_format_node_as_str(const stat_node *node, gint sort_column, gboolean sort_descending); +#ifdef __cplusplus +} +#endif /* __cplusplus */ + #endif /* __STATS_TREE_PRIV_H */ |