From a1571ffad9505630488add82971fe5c0451a6d66 Mon Sep 17 00:00:00 2001 From: Stefan Ritt Date: Wed, 13 Dec 2006 16:16:51 +0000 Subject: [PATCH] Implemented proper sorting of numeric attributes SVN revision: 1778 --- src/elogd.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/elogd.c b/src/elogd.c index c84d3664..6cee0e8c 100755 --- a/src/elogd.c +++ b/src/elogd.c @@ -15763,6 +15763,16 @@ int msg_compare_reverse(const void *m1, const void *m2) return strcoll(((MSG_LIST *) m2)->string, ((MSG_LIST *) m1)->string); } +int msg_compare_numeric(const void *m1, const void *m2) +{ + return atoi(((MSG_LIST *) m1)->string) - atoi(((MSG_LIST *) m2)->string); +} + +int msg_compare_reverse_numeric(const void *m1, const void *m2) +{ + return atoi(((MSG_LIST *) m2)->string) - atoi(((MSG_LIST *) m1)->string); +} + /*------------------------------------------------------------------*/ char *param_in_str(char *str, char *param) @@ -16901,8 +16911,8 @@ void show_elog_list(LOGBOOK * lbs, int past_n, int last_n, int page_n, BOOL defa { int i, j, n, index, size, status, d1, m1, y1, d2, m2, y2, n_line, flags, current_year, current_month, current_day, printable, n_logbook, - n_display, reverse, n_attr_disp, total_n_msg, n_msg, search_all, message_id, - n_page, i_start, i_stop, in_reply_to_id, page_mid, page_mid_head; + n_display, reverse, numeric, n_attr_disp, total_n_msg, n_msg, search_all, + message_id, n_page, i_start, i_stop, in_reply_to_id, page_mid, page_mid_head; char date[80], attrib[MAX_N_ATTR][NAME_LENGTH], disp_attr[MAX_N_ATTR + 4][NAME_LENGTH], *list, *text, *text1, in_reply_to[80], reply_to[MAX_REPLY_TO * 10], attachment[MAX_ATTACHMENTS][MAX_PATH_LENGTH], encoding[80], locked_by[256], @@ -17407,6 +17417,8 @@ void show_elog_list(LOGBOOK * lbs, int past_n, int last_n, int page_n, BOOL defa } } + numeric = FALSE; + /* do filtering */ for (index = 0; index < n_msg; index++) { if (!msg_list[index].lbs) @@ -17633,6 +17645,8 @@ void show_elog_list(LOGBOOK * lbs, int past_n, int last_n, int page_n, BOOL defa if ((isparam("sort") && strieq(getparam("sort"), attr_list[i])) || (isparam("rsort") && strieq(getparam("rsort"), attr_list[i]))) { strlcpy(msg_list[index].string, attrib[i], 256); + if (attr_flags[i] | AF_NUMERIC) + numeric = TRUE; } if ((isparam("sort") && strieq(getparam("sort"), loc("ID"))) @@ -17673,7 +17687,10 @@ void show_elog_list(LOGBOOK * lbs, int past_n, int last_n, int page_n, BOOL defa /*---- sort messasges ----*/ - qsort(msg_list, n_msg, sizeof(MSG_LIST), reverse ? msg_compare_reverse : msg_compare); + if (numeric) + qsort(msg_list, n_msg, sizeof(MSG_LIST), reverse ? msg_compare_reverse_numeric : msg_compare_numeric); + else + qsort(msg_list, n_msg, sizeof(MSG_LIST), reverse ? msg_compare_reverse : msg_compare); /*---- search page for specific message ----*/