Update portability notes.
[darkstat] / hosts_sort.c
index 655c331..110fbfb 100644 (file)
@@ -1,5 +1,5 @@
 /* darkstat 3
- * copyright (c) 2001-2006 Emil Mikulic.
+ * copyright (c) 2001-2012 Emil Mikulic.
  *
  * hosts_sort.c: quicksort a table of buckets.
  *
@@ -7,43 +7,38 @@
  * GNU General Public License version 2. (see COPYING.GPL)
  */
 
-#include "darkstat.h"
-#include "hosts_db.h"
+#include "cdefs.h"
 #include "err.h"
+#include "hosts_db.h"
 
-/* ---------------------------------------------------------------------------
- * comparator for sorting (biggest first)
- */
-static int
-cmp(const struct bucket * const *x, const struct bucket * const *y,
-    const enum sort_dir dir)
-{
-   uint64_t a, b;
+static int cmp_u64(const uint64_t a, const uint64_t b) {
+   if (a < b) return (1);
+   if (a > b) return (-1);
+   return (0);
+}
 
+static int cmp_i64(const int64_t a, const int64_t b) {
+   if (a < b) return (1);
+   if (a > b) return (-1);
+   return (0);
+}
+
+/* Comparator for sorting 'struct bucket' */
+static int cmp(const struct bucket * const *x, const struct bucket * const *y,
+    const enum sort_dir dir) {
    switch (dir) {
-   case IN:
-      a = (*x)->in;
-      b = (*y)->in;
-      break;
-   case OUT:
-      a = (*x)->out;
-      b = (*y)->out;
-      break;
-   case TOTAL:
-      a = (*x)->total;
-      b = (*y)->total;
-      break;
-   case LASTSEEN:
-      a = (*x)->u.host.last_seen;
-      b = (*y)->u.host.last_seen;
-      break;
-   default:
-      errx(1, "cmp: unknown direction: %d", dir);
+      case IN:
+         return cmp_u64((*x)->in, (*y)->in);
+      case OUT:
+         return cmp_u64((*x)->out, (*y)->out);
+      case TOTAL:
+         return cmp_u64((*x)->total, (*y)->total);
+      case LASTSEEN:
+         return cmp_i64((*x)->u.host.last_seen_mono,
+                        (*y)->u.host.last_seen_mono);
+      default:
+         errx(1, "cmp: unknown direction: %d", dir);
    }
-
-   if (a < b) return (1);
-   else if (a > b) return (-1);
-   else return (0);
 }
 
 /*
@@ -183,9 +178,9 @@ loop:
        }
 
        pn = a + n;
-       r = min(pa - a, pb - pa);
+       r = MIN(pa - a, pb - pa);
        vecswap(a, pb - r, r);
-       r = min(pd - pc, pn - pd - 1);
+       r = MIN(pd - pc, pn - pd - 1);
        vecswap(pb, pn - r, r);
        if (((r = pb - pa) > 1) && ((unsigned)r >= left))
                qsort_buckets(a, r, left, right, dir);