aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gtk/packet_list.c80
1 files changed, 38 insertions, 42 deletions
diff --git a/gtk/packet_list.c b/gtk/packet_list.c
index 9f816f6073..0606738d64 100644
--- a/gtk/packet_list.c
+++ b/gtk/packet_list.c
@@ -1,7 +1,7 @@
/* packet_list.c
* packet list related functions 2002 Olivier Abad
*
- * $Id: packet_list.c,v 1.15 2004/01/31 04:10:05 guy Exp $
+ * $Id: packet_list.c,v 1.16 2004/01/31 04:26:23 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -97,23 +97,27 @@ GtkWidget *packet_list;
/* EthClist compare routine, overrides default to allow numeric comparison */
-#define COMPARE_NUM(n1, n2) (((n1) < (n2)) ? -1 : \
- ((n1) > (n2)) ? 1 : \
+#define COMPARE_FRAME_NUM() ((fdata1->num < fdata2->num) ? -1 : \
+ (fdata1->num > fdata2->num) ? 1 : \
0)
+#define COMPARE_NUM(f) ((fdata1->f < fdata2->f) ? -1 : \
+ (fdata1->f > fdata2->f) ? 1 : \
+ COMPARE_FRAME_NUM())
+
/* Compare time stamps.
A packet whose time is a reference time is considered to have
a lower time stamp than any frame with a non-reference time;
if both packets' times are reference times, we compare the
times of the packets. */
-#define COMPARE_TS(ts1r, ts1s, ts1u, ts2r, ts2s, ts2u) \
- (((ts1r) && !(ts2r)) ? -1 : \
- (!(ts1r) && (ts2r)) ? 1 : \
- ((ts1s) < (ts2s)) ? -1 : \
- ((ts1s) > (ts2s)) ? 1 : \
- ((ts1u) < (ts2u)) ? -1 :\
- ((ts1u) > (ts2u)) ? 1 : \
- 0)
+#define COMPARE_TS(secs, usecs) \
+ ((fdata1->flags.ref_time && !fdata2->flags.ref_time) ? -1 : \
+ (!fdata1->flags.ref_time && fdata2->flags.ref_time) ? 1 : \
+ (fdata1->secs < fdata2->secs) ? -1 : \
+ (fdata1->secs > fdata2->secs) ? 1 : \
+ (fdata1->usecs < fdata2->usecs) ? -1 :\
+ (fdata1->usecs > fdata2->usecs) ? 1 : \
+ COMPARE_FRAME_NUM())
static gint
packet_list_compare(EthCList *clist, gconstpointer ptr1, gconstpointer ptr2)
{
@@ -133,60 +137,44 @@ packet_list_compare(EthCList *clist, gconstpointer ptr1, gconstpointer ptr2)
double num1;
double num2;
+ int ret;
+
gint col_fmt = cfile.cinfo.col_fmt[clist->sort_column];
switch (col_fmt) {
case COL_NUMBER:
- return COMPARE_NUM(fdata1->num, fdata2->num);
+ return COMPARE_FRAME_NUM();
case COL_CLS_TIME:
switch (timestamp_type) {
case TS_ABSOLUTE:
case TS_ABSOLUTE_WITH_DATE:
- return COMPARE_TS(fdata1->flags.ref_time, fdata1->abs_secs,
- fdata1->abs_usecs,
- fdata2->flags.ref_time, fdata2->abs_secs,
- fdata2->abs_usecs);
+ return COMPARE_TS(abs_secs, abs_usecs);
case TS_RELATIVE:
- return COMPARE_TS(fdata1->flags.ref_time, fdata1->rel_secs,
- fdata1->rel_usecs,
- fdata2->flags.ref_time, fdata2->rel_secs,
- fdata2->rel_usecs);
+ return COMPARE_TS(rel_secs, rel_usecs);
case TS_DELTA:
- return COMPARE_TS(fdata1->flags.ref_time, fdata1->del_secs,
- fdata1->del_usecs,
- fdata2->flags.ref_time, fdata2->del_secs,
- fdata2->del_usecs);
+ return COMPARE_TS(del_secs, del_usecs);
}
return 0;
case COL_ABS_TIME:
- return COMPARE_TS(fdata1->flags.ref_time, fdata1->abs_secs,
- fdata1->abs_usecs,
- fdata2->flags.ref_time, fdata2->abs_secs,
- fdata2->abs_usecs);
+ return COMPARE_TS(abs_secs, abs_usecs);
case COL_REL_TIME:
- return COMPARE_TS(fdata1->flags.ref_time, fdata1->rel_secs,
- fdata1->rel_usecs,
- fdata2->flags.ref_time, fdata2->rel_secs,
- fdata2->rel_usecs);
+ return COMPARE_TS(rel_secs, rel_usecs);
case COL_DELTA_TIME:
- return COMPARE_TS(fdata1->flags.ref_time, fdata1->del_secs,
- fdata1->del_usecs,
- fdata2->flags.ref_time, fdata2->del_secs,
- fdata2->del_usecs);
+ return COMPARE_TS(del_secs, del_usecs);
case COL_PACKET_LENGTH:
- return COMPARE_NUM(fdata1->pkt_len, fdata2->pkt_len);
+ return COMPARE_NUM(pkt_len);
case COL_CUMULATIVE_BYTES:
- return COMPARE_NUM(fdata1->cum_bytes, fdata2->cum_bytes);
+ return COMPARE_NUM(cum_bytes);
default:
num1 = atof(text1);
@@ -202,19 +190,27 @@ packet_list_compare(EthCList *clist, gconstpointer ptr1, gconstpointer ptr2)
else if (num1 > num2)
return 1;
else
- return 0;
+ return COMPARE_FRAME_NUM();
}
else {
/* Compare text column */
- if (!text2)
- return (text1 != NULL);
+ if (!text2) {
+ if (text1)
+ return 1;
+ else
+ return COMPARE_FRAME_NUM();
+ }
if (!text1)
return -1;
- return strcmp(text1, text2);
+ ret = strcmp(text1, text2);
+ if (ret == 0)
+ return COMPARE_FRAME_NUM();
+ else
+ return ret;
}
}
}