From: Jakub Zawadzki Date: Wed, 25 Jul 2012 12:52:47 +0000 (-0000) Subject: Fix bug #7347: "Resize All Columns" fails in Time Column X-Git-Url: http://git.samba.org/?p=metze%2Fwireshark%2Fwip.git;a=commitdiff_plain;h=7d900f7450a31609b4412d72146ea172116b175a Fix bug #7347: "Resize All Columns" fails in Time Column If column is based on frame data packet_list_get_widest_column_string() was constructing his own frame_data with biggest *value* for given column (which might be not the longest string) and later fill column for it. Which generally should work (time precision is fixed), but in r41185 to lot col_*() function was added check if fd->flags.has_ts is set. packet_list_get_widest_column_string() was passing frame_data with flags.has_ts unset. To make maintaince easier, instead of fixing the problem with flags.has_ts, generate column buffer for each frame, and find the one which has longest string. svn path=/trunk/; revision=43991 --- diff --git a/ui/gtk/packet_list_store.c b/ui/gtk/packet_list_store.c index 3bb86b33a2..6867b6b4d7 100644 --- a/ui/gtk/packet_list_store.c +++ b/ui/gtk/packet_list_store.c @@ -1246,94 +1246,29 @@ packet_list_get_widest_column_string(PacketList *packet_list, gint col) PacketListRecord *record; guint vis_idx; - frame_data fdata; - memset (&fdata, 0, sizeof fdata); - - nstime_set_zero(&fdata.abs_ts); - nstime_set_zero(&fdata.rel_ts); - nstime_set_zero(&fdata.del_cap_ts); - nstime_set_zero(&fdata.del_dis_ts); + guint widest_packet = 0; + gint widest_column_len = -1; for(vis_idx = 0; vis_idx < PACKET_LIST_RECORD_COUNT(packet_list->visible_rows); ++vis_idx) { - record = PACKET_LIST_RECORD_GET(packet_list->visible_rows, vis_idx); - switch (cfile.cinfo.col_fmt[col]) { + gint column_len; - case COL_NUMBER: - if (record->fdata->num > fdata.num) - fdata.num = record->fdata->num; - break; - case COL_PACKET_LENGTH: - if (record->fdata->pkt_len > fdata.pkt_len) - fdata.pkt_len = record->fdata->pkt_len; - break; - case COL_CUMULATIVE_BYTES: - if (record->fdata->cum_bytes > fdata.cum_bytes) - fdata.cum_bytes = record->fdata->cum_bytes; - break; - case COL_ABS_TIME: - case COL_ABS_DATE_TIME: - case COL_UTC_TIME: - case COL_UTC_DATE_TIME: - if (nstime_cmp(&record->fdata->abs_ts, &fdata.abs_ts) > 0) - fdata.abs_ts = record->fdata->abs_ts; - break; - case COL_REL_TIME: - if (nstime_cmp(&record->fdata->rel_ts, &fdata.rel_ts) > 0) - fdata.rel_ts = record->fdata->rel_ts; - break; - case COL_DELTA_TIME: - if (nstime_cmp(&record->fdata->del_cap_ts, &fdata.del_cap_ts) > 0) - fdata.del_cap_ts = record->fdata->del_cap_ts; - break; - case COL_DELTA_TIME_DIS: - if (nstime_cmp(&record->fdata->del_dis_ts, &fdata.del_dis_ts) > 0) - fdata.del_dis_ts = record->fdata->del_dis_ts; - break; - case COL_CLS_TIME: - switch (timestamp_get_type()) { - case TS_ABSOLUTE: - case TS_ABSOLUTE_WITH_DATE: - case TS_UTC: - case TS_UTC_WITH_DATE: - if (nstime_cmp(&record->fdata->abs_ts, &fdata.abs_ts) > 0) - fdata.abs_ts = record->fdata->abs_ts; - break; - - case TS_RELATIVE: - if (nstime_cmp(&record->fdata->rel_ts, &fdata.rel_ts) > 0) - fdata.rel_ts = record->fdata->rel_ts; - break; - - case TS_DELTA: - if (nstime_cmp(&record->fdata->del_cap_ts, &fdata.del_cap_ts) > 0) - fdata.del_cap_ts = record->fdata->del_cap_ts; - break; - - case TS_DELTA_DIS: - if (nstime_cmp(&record->fdata->del_dis_ts, &fdata.del_dis_ts) > 0) - fdata.del_dis_ts = record->fdata->del_dis_ts; - break; - - case TS_EPOCH: - if (nstime_cmp(&record->fdata->abs_ts, &fdata.abs_ts) > 0) - fdata.abs_ts = record->fdata->abs_ts; - break; - - case TS_NOT_SET: - /* code is missing for this case, but I don't know which [jmayer20051219] */ - g_assert_not_reached(); - break; - } - break; + record = PACKET_LIST_RECORD_GET(packet_list->visible_rows, vis_idx); - default: - g_assert_not_reached(); + col_fill_in_frame_data(record->fdata, &cfile.cinfo, col, FALSE); + column_len = (gint) strlen(cfile.cinfo.col_buf[col]); + if (column_len > widest_column_len) { + widest_column_len = column_len; + widest_packet = vis_idx; } } - col_fill_in_frame_data(&fdata, &cfile.cinfo, col, FALSE); + if (widest_column_len != -1) { + record = PACKET_LIST_RECORD_GET(packet_list->visible_rows, widest_packet); + col_fill_in_frame_data(record->fdata, &cfile.cinfo, col, FALSE); - return cfile.cinfo.col_buf[col]; + return cfile.cinfo.col_buf[col]; + } else + return ""; } else { PacketListRecord *record;