]> git.ipfire.org Git - thirdparty/mtr.git/commitdiff
fix(curses): show decimal latency scale 637/head
authorDarafei Praliaskouski <me@komzpa.net>
Fri, 8 May 2026 14:21:13 +0000 (18:21 +0400)
committerDarafei Praliaskouski <me@komzpa.net>
Mon, 25 May 2026 11:42:34 +0000 (15:42 +0400)
test/format_count.c
ui/curses.c
ui/format.c
ui/format.h

index c632bc966b7e48ac7e63e5374b926f6b35f0c1af..fa602d1145c55196f828cabaf4ede01f91bc6aa0 100644 (file)
@@ -31,6 +31,22 @@ static void check_count(
     }
 }
 
+static void check_latency(
+    int value,
+    const char *expected)
+{
+    char buf[16];
+
+    memset(buf, 0, sizeof(buf));
+    mtr_format_latency_ms(value, buf, sizeof(buf));
+
+    if (strcmp(buf, expected) != 0) {
+        fprintf(stderr, "%d usec formatted as '%s', expected '%s'\n",
+                value, buf, expected);
+        exit(EXIT_FAILURE);
+    }
+}
+
 int main(
     void)
 {
@@ -49,5 +65,14 @@ int main(
     check_count(999999999, "999M9");
     check_count(1000000000, "1G000");
 
+    check_latency(0, "0.0");
+    check_latency(250, "0.2");
+    check_latency(999, "1.0");
+    check_latency(1000, "1");
+    check_latency(1250, "1.2");
+    check_latency(9999, "10.0");
+    check_latency(10000, "10");
+    check_latency(12345, "12");
+
     return EXIT_SUCCESS;
 }
index 90e75dd53bd8bf2a9af6049d6af3c4e177c1811f..01abc7fc2f8ad8ea9da3a7aba113b5a5eabb9f1a 100644 (file)
@@ -976,6 +976,8 @@ void mtr_curses_redraw(
 #endif
 
         for (i = 0; i < NUM_FACTORS; i++) {
+            char latency[16];
+
             printw("  ");
             attrset(block_col[i + 1]);
 #ifdef WITH_BRAILLE_DISPLAY
@@ -986,7 +988,9 @@ void mtr_curses_redraw(
                 printw("%c", block_map[i]);
             attrset(A_NORMAL);
             if (i < NUM_FACTORS-1)
-                printw(":%d ms", scale[i] / 1000);
+                printw(":%s ms",
+                       mtr_format_latency_ms(scale[i], latency,
+                                             sizeof(latency)));
         }
     }
 
index dd7240ff1c166ad63747652bc84507f39e1eca70..ad2047972da5500ce9c9ea66be28872b9faf8c8f 100644 (file)
@@ -10,6 +10,7 @@
 #include "config.h"
 
 #include <stdio.h>
+#include <string.h>
 
 #include "format.h"
 
@@ -42,3 +43,21 @@ char *mtr_format_count(
 
     return buf;
 }
+
+char *mtr_format_latency_ms(
+    int usec,
+    char *buf,
+    size_t buf_size)
+{
+    int abs_usec = usec < 0 ? -usec : usec;
+
+    if (abs_usec < 1000) {
+        snprintf(buf, buf_size, "%.1f", usec / 1000.0);
+    } else if (abs_usec < 10000 && usec % 1000 != 0) {
+        snprintf(buf, buf_size, "%.1f", usec / 1000.0);
+    } else {
+        snprintf(buf, buf_size, "%d", usec / 1000);
+    }
+
+    return buf;
+}
index 2cc87d131cde09063ddce8c94f040b1c091a5afd..50889b5c82d137ad522f1d63a55760c6e12d98ae 100644 (file)
 #ifndef MTR_FORMAT_H
 #define MTR_FORMAT_H
 
+#include <stddef.h>
+
 char *mtr_format_count(
     int n,
     int width,
     char *buf);
 
+char *mtr_format_latency_ms(
+    int usec,
+    char *buf,
+    size_t buf_size);
+
 #endif