X-Git-Url: http://git.samba.org/samba.git/?p=obnox%2Fwireshark%2Fwip.git;a=blobdiff_plain;f=print.c;h=984b31da4ab41fcac449e5b35e91a6233160b539;hp=5632bcc5166e64f89411d8afb5bbe66243ed6e5e;hb=326d8141141b92f0542098aa068deaa70891d379;hpb=2826ab79e35562a8c8004b03c2fcfc1f61ab88b7 diff --git a/print.c b/print.c index 5632bcc516..984b31da4a 100644 --- a/print.c +++ b/print.c @@ -56,7 +56,7 @@ typedef struct { GSList *src_list; print_dissections_e print_dissections; gboolean print_hex_for_data; - char_enc encoding; + packet_char_enc encoding; epan_dissect_t *edt; } print_data; @@ -82,13 +82,12 @@ struct _output_fields { }; static const gchar* get_field_hex_value(GSList* src_list, field_info *fi); -const gchar* get_node_field_value(field_info* fi, epan_dissect_t* edt); static void proto_tree_print_node(proto_node *node, gpointer data); static void proto_tree_write_node_pdml(proto_node *node, gpointer data); static const guint8 *get_field_data(GSList *src_list, field_info *fi); static void write_pdml_field_hex_value(write_pdml_data *pdata, field_info *fi); static gboolean print_hex_data_buffer(print_stream_t *stream, const guchar *cp, - guint length, char_enc encoding); + guint length, packet_char_enc encoding); static void ps_clean_string(unsigned char *out, const unsigned char *in, int outbuf_size); static void print_escaped_xml(FILE *fh, const char *unescaped_string); @@ -345,7 +344,7 @@ proto_tree_write_node_pdml(proto_node *node, gpointer data) #if 0 /* PDML spec, see: - * http://analyzer.polito.it/30alpha/docs/dissectors/PDMLSpec.htm + * http://www.nbee.org/doku.php?id=netpdl:pdml_specification * * the show fields contains things in 'human readable' format * showname: contains only the name of the field @@ -493,7 +492,7 @@ print_pdml_geninfo(proto_tree *tree, FILE *fh) if (g_ptr_array_len(finfo_array) < 1) { return; } - frame_finfo = finfo_array->pdata[0]; + frame_finfo = (field_info *)finfo_array->pdata[0]; g_ptr_array_free(finfo_array, TRUE); /* frame.number --> geninfo.num */ @@ -525,7 +524,7 @@ print_pdml_geninfo(proto_tree *tree, FILE *fh) if (g_ptr_array_len(finfo_array) < 1) { return; } - timestamp = fvalue_get(&((field_info*)finfo_array->pdata[0])->value); + timestamp = (nstime_t *)fvalue_get(&((field_info*)finfo_array->pdata[0])->value); g_ptr_array_free(finfo_array, TRUE); /* Print geninfo start */ @@ -551,7 +550,7 @@ print_pdml_geninfo(proto_tree *tree, FILE *fh) /* Print geninfo.timestamp */ fprintf(fh, " \n", - abs_time_to_str(timestamp), (int) timestamp->secs, timestamp->nsecs, frame_finfo->length); + abs_time_to_str(timestamp, FALSE), (int) timestamp->secs, timestamp->nsecs, frame_finfo->length); /* Print geninfo end */ fprintf(fh, @@ -576,9 +575,10 @@ 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(edt->pi.fd->num == 1) { + if(!structure_written) { fprintf(fh, "\n"); for(i=0; i < edt->pi.cinfo->num_cols; i++) { @@ -588,6 +588,8 @@ proto_tree_write_psml(epan_dissect_t *edt, FILE *fh) } fprintf(fh, "\n\n"); + + structure_written = TRUE; } fprintf(fh, "\n"); @@ -690,7 +692,7 @@ get_field_data(GSList *src_list, field_info *fi) gint length, tvbuff_length; for (src_le = src_list; src_le != NULL; src_le = src_le->next) { - src = src_le->data; + src = (data_source *)src_le->data; src_tvb = src->tvb; if (fi->ds_tvb == src_tvb) { /* @@ -724,6 +726,7 @@ static void print_escaped_xml(FILE *fh, const char *unescaped_string) { const char *p; + char temp_str[8]; for (p = unescaped_string; *p != '\0'; p++) { switch (*p) { @@ -743,7 +746,12 @@ print_escaped_xml(FILE *fh, const char *unescaped_string) fputs("'", fh); break; default: - fputc(*p, fh); + if (g_ascii_isprint(*p)) + fputc(*p, fh); + else { + g_snprintf(temp_str, sizeof(temp_str), "\\x%x", (guint8)*p); + fputs(temp_str, fh); + } } } } @@ -799,7 +807,7 @@ print_hex_data(print_stream_t *stream, epan_dissect_t *edt) for (src_le = edt->pi.data_src; src_le != NULL; src_le = src_le->next) { - src = src_le->data; + src = (data_source *)src_le->data; tvb = src->tvb; if (multiple_sources) { name = get_data_source_name(src); @@ -843,7 +851,7 @@ print_hex_data(print_stream_t *stream, epan_dissect_t *edt) static gboolean print_hex_data_buffer(print_stream_t *stream, const guchar *cp, - guint length, char_enc encoding) + guint length, packet_char_enc encoding) { register unsigned int ad, i, j, k, l; guchar c; @@ -882,7 +890,6 @@ print_hex_data_buffer(print_stream_t *stream, const guchar *cp, * Start of a new line. */ j = 0; - k = 0; l = use_digits; do { l--; @@ -902,7 +909,7 @@ print_hex_data_buffer(print_stream_t *stream, const guchar *cp, line[j++] = binhex[c>>4]; line[j++] = binhex[c&0xf]; j++; - if (encoding == CHAR_EBCDIC) { + if (encoding == PACKET_CHAR_ENC_CHAR_EBCDIC) { c = EBCDIC_to_ASCII1(c); } line[k++] = c >= ' ' && c < 0x7f ? c : '.'; @@ -1005,7 +1012,7 @@ print_preamble_text(print_stream_t *self _U_, gchar *filename _U_) static gboolean print_line_text(print_stream_t *self, int indent, const char *line) { - output_text *output = self->data; + output_text *output = (output_text *)self->data; char space[MAX_INDENT+1]; int i; int num_spaces; @@ -1038,7 +1045,7 @@ print_bookmark_text(print_stream_t *self _U_, const gchar *name _U_, static gboolean new_page_text(print_stream_t *self) { - output_text *output = self->data; + output_text *output = (output_text *)self->data; fputs("\f", output->fh); return !ferror(output->fh); @@ -1054,7 +1061,7 @@ print_finale_text(print_stream_t *self _U_) static gboolean destroy_text(print_stream_t *self) { - output_text *output = self->data; + output_text *output = (output_text *)self->data; gboolean ret; ret = close_print_dest(output->to_file, output->fh); @@ -1073,15 +1080,15 @@ static const print_stream_ops_t print_text_ops = { }; static print_stream_t * -print_stream_text_allow(int to_file, FILE *fh) +print_stream_text_alloc(int to_file, FILE *fh) { print_stream_t *stream; output_text *output; - output = g_malloc(sizeof *output); + output = (output_text *)g_malloc(sizeof *output); output->to_file = to_file; output->fh = fh; - stream = g_malloc(sizeof (print_stream_t)); + stream = (print_stream_t *)g_malloc(sizeof (print_stream_t)); stream->ops = &print_text_ops; stream->data = output; @@ -1097,13 +1104,13 @@ print_stream_text_new(int to_file, const char *dest) if (fh == NULL) return NULL; - return print_stream_text_allow(to_file, fh); + return print_stream_text_alloc(to_file, fh); } print_stream_t * print_stream_text_stdio_new(FILE *fh) { - return print_stream_text_allow(TRUE, fh); + return print_stream_text_alloc(TRUE, fh); } typedef struct { @@ -1114,7 +1121,7 @@ typedef struct { static gboolean print_preamble_ps(print_stream_t *self, gchar *filename) { - output_ps *output = self->data; + output_ps *output = (output_ps *)self->data; unsigned char psbuffer[MAX_PS_LINE_LENGTH]; /* static sized buffer! */ print_ps_preamble(output->fh); @@ -1132,7 +1139,7 @@ print_preamble_ps(print_stream_t *self, gchar *filename) static gboolean print_line_ps(print_stream_t *self, int indent, const char *line) { - output_ps *output = self->data; + output_ps *output = (output_ps *)self->data; unsigned char psbuffer[MAX_PS_LINE_LENGTH]; /* static sized buffer! */ ps_clean_string(psbuffer, line, MAX_PS_LINE_LENGTH); @@ -1143,7 +1150,7 @@ print_line_ps(print_stream_t *self, int indent, const char *line) static gboolean print_bookmark_ps(print_stream_t *self, const gchar *name, const gchar *title) { - output_ps *output = self->data; + output_ps *output = (output_ps *)self->data; unsigned char psbuffer[MAX_PS_LINE_LENGTH]; /* static sized buffer! */ /* @@ -1173,7 +1180,7 @@ print_bookmark_ps(print_stream_t *self, const gchar *name, const gchar *title) static gboolean new_page_ps(print_stream_t *self) { - output_ps *output = self->data; + output_ps *output = (output_ps *)self->data; fputs("formfeed\n", output->fh); return !ferror(output->fh); @@ -1182,7 +1189,7 @@ new_page_ps(print_stream_t *self) static gboolean print_finale_ps(print_stream_t *self) { - output_ps *output = self->data; + output_ps *output = (output_ps *)self->data; print_ps_finale(output->fh); return !ferror(output->fh); @@ -1191,7 +1198,7 @@ print_finale_ps(print_stream_t *self) static gboolean destroy_ps(print_stream_t *self) { - output_ps *output = self->data; + output_ps *output = (output_ps *)self->data; gboolean ret; ret = close_print_dest(output->to_file, output->fh); @@ -1215,10 +1222,10 @@ print_stream_ps_alloc(int to_file, FILE *fh) print_stream_t *stream; output_ps *output; - output = g_malloc(sizeof *output); + output = (output_ps *)g_malloc(sizeof *output); output->to_file = to_file; output->fh = fh; - stream = g_malloc(sizeof (print_stream_t)); + stream = (print_stream_t *)g_malloc(sizeof (print_stream_t)); stream->ops = &print_ps_ops; stream->data = output; @@ -1279,7 +1286,7 @@ void output_fields_free(output_fields_t* fields) if(NULL != fields->fields) { gsize i; for(i = 0; i < fields->fields->len; ++i) { - gchar* field = g_ptr_array_index(fields->fields,i); + gchar* field = (gchar *)g_ptr_array_index(fields->fields,i); g_free(field); } g_ptr_array_free(fields->fields, TRUE); @@ -1398,7 +1405,7 @@ void write_fields_preamble(output_fields_t* fields, FILE *fh) } for(i = 0; i < fields->fields->len; ++i) { - const gchar* field = g_ptr_array_index(fields->fields,i); + const gchar* field = (const gchar *)g_ptr_array_index(fields->fields,i); if(i != 0 ) { fputc(fields->separator, fh); } @@ -1413,7 +1420,7 @@ static void proto_tree_get_node_field_values(proto_node *node, gpointer data) field_info *fi; gpointer field_index; - call_data = data; + call_data = (write_field_data_t *)data; fi = PNODE_FINFO(node); g_assert(fi && "dissection with an invisible proto tree?"); @@ -1458,7 +1465,7 @@ void proto_tree_write_fields(output_fields_t* fields, epan_dissect_t *edt, FILE i = 0; while( i < fields->fields->len) { - gchar* field = g_ptr_array_index(fields->fields, i); + gchar* field = (gchar *)g_ptr_array_index(fields->fields, i); /* Store field indicies +1 so that zero is not a valid value, * and can be distinguished from NULL as a pointer. */