gchar quote;
};
+static gboolean write_headers = FALSE;
+
static const gchar* get_field_hex_value(GSList* src_list, field_info *fi);
static void proto_tree_print_node(proto_node *node, gpointer data);
static void proto_tree_write_node_pdml(proto_node *node, gpointer data);
data.src_list = edt->pi.data_src;
data.edt = edt;
- /* We shouldn't be called with a NULL pointer here because we've
- * created a visible protocol tree */
- g_assert(data.src_list);
-
fprintf(fh, "<packet>\n");
/* Print a "geninfo" protocol as required by PDML */
fputs("<?xml version=\"1.0\"?>\n", fh);
fputs("<psml version=\"" PSML_VERSION "\" ", fh);
fprintf(fh, "creator=\"%s/%s\">\n", PACKAGE, VERSION);
+ write_headers = TRUE;
}
void
proto_tree_write_psml(epan_dissect_t *edt, FILE *fh)
{
gint i;
- static gboolean structure_written = FALSE;
/* if this is the first packet, we have to create the PSML structure output */
- if(!structure_written) {
+ if(write_headers) {
fprintf(fh, "<structure>\n");
for(i=0; i < edt->pi.cinfo->num_cols; i++) {
fprintf(fh, "</structure>\n\n");
- structure_written = TRUE;
+ write_headers = FALSE;
}
fprintf(fh, "<packet>\n");
void
write_csv_preamble(FILE *fh _U_)
{
+ write_headers = TRUE;
+}
+static gchar *csv_massage_str(const gchar *source, const gchar *exceptions)
+{
+ gchar *csv_str;
+ gchar *tmp_str;
+
+ csv_str = g_strescape(source, exceptions);
+ tmp_str = csv_str;
+ while ( (tmp_str = strstr(tmp_str, "\\\"")) != NULL )
+ *tmp_str = '\"';
+ return csv_str;
}
-void
-proto_tree_write_csv(epan_dissect_t *edt, FILE *fh)
+static void csv_write_str(const char *str, char sep, FILE *fh)
{
- gint i;
+ gchar *csv_str;
- /* if this is the first packet, we have to write the CSV header */
- if(edt->pi.fd->num == 1) {
- for(i=0; i < edt->pi.cinfo->num_cols - 1; i++)
- fprintf(fh, "\"%s\",", edt->pi.cinfo->col_title[i]);
+ csv_str = csv_massage_str(str, NULL);
+ fprintf(fh, "\"%s\"%c", csv_str, sep);
+ g_free(csv_str);
+}
- fprintf(fh, "\"%s\"\n", edt->pi.cinfo->col_title[i]);
- }
+void
+proto_tree_write_csv(epan_dissect_t *edt, FILE *fh)
+{
+ gint i;
+ /* if this is the first packet, we have to write the CSV header */
+ if(write_headers) {
for(i=0; i < edt->pi.cinfo->num_cols - 1; i++)
- fprintf(fh, "\"%s\",", edt->pi.cinfo->col_data[i]);
+ csv_write_str(edt->pi.cinfo->col_title[i], ',', fh);
+ csv_write_str(edt->pi.cinfo->col_title[i], '\n', fh);
+ write_headers = FALSE;
+ }
- fprintf(fh, "\"%s\"\n", edt->pi.cinfo->col_data[i]);
+ for(i=0; i < edt->pi.cinfo->num_cols - 1; i++)
+ csv_write_str(edt->pi.cinfo->col_data[i], ',', fh);
+ csv_write_str(edt->pi.cinfo->col_data[i], '\n', fh);
}
void
const guchar *cp;
guint length;
- /* We shouldn't be called with a NULL pointer here because we've
- * created a visible protocol tree */
- g_assert(edt->pi.data_src);
-
/*
* Set "multiple_sources" iff this frame has more than one
* data source; if it does, we need to print the name of
int rd, wr;
char c;
+ if (in == NULL) {
+ out[0] = '\0';
+ return;
+ }
+
for (rd = 0, wr = 0 ; wr < outbuf_size; rd++, wr++ ) {
c = in[rd];
switch (c) {
print_ps_preamble(output->fh);
- fputs("%% Set the font to 8 point\n", output->fh);
- fputs("/Courier findfont 8 scalefont setfont\n", output->fh);
- fputs("\n", output->fh);
fputs("%% the page title\n", output->fh);
ps_clean_string(psbuffer, filename, MAX_PS_LINE_LENGTH);
fprintf(output->fh, "/ws_pagetitle (%s - Wireshark " VERSION "%s) def\n", psbuffer, wireshark_svnversion);