]> granicus.if.org Git - strace/commitdiff
count: add ability to sort on errors field
authorEugene Syromyatnikov <evgsyr@gmail.com>
Tue, 4 Sep 2018 17:20:36 +0000 (19:20 +0200)
committerEugene Syromyatnikov <evgsyr@gmail.com>
Thu, 8 Aug 2019 17:04:29 +0000 (19:04 +0200)
For completeness.

* count.c (error_cmp): New function.
(set_sortby): Add sort keys for errors field.
* strace.1.in (.SH OPTIONS) <-S>: Document it.
* strace.c (usage): Likewise.
* tests/strace-S.test: Check it.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
count.c
strace.1.in
strace.c
tests/strace-S.test

diff --git a/count.c b/count.c
index 57af23f87937fc38b3f1ae7dae48f8d1452ec050..a1cdf8235ee34d3db1ab300698f9b353e5af337e 100644 (file)
--- a/count.c
+++ b/count.c
@@ -86,6 +86,17 @@ count_cmp(const void *a, const void *b)
        return (m < n) ? 1 : (m > n) ? -1 : 0;
 }
 
+static int
+error_cmp(const void *a, const void *b)
+{
+       const unsigned int *a_int = a;
+       const unsigned int *b_int = b;
+       unsigned int m = counts[*a_int].errors;
+       unsigned int n = counts[*b_int].errors;
+
+       return (m < n) ? 1 : (m > n) ? -1 : 0;
+}
+
 static int (*sortfun)(const void *, const void *);
 
 void
@@ -100,6 +111,8 @@ set_sortby(const char *sortby)
                { time_cmp,     "total_time" },
                { count_cmp,    "calls" },
                { count_cmp,    "count" },
+               { error_cmp,    "error" },
+               { error_cmp,    "errors" },
                { syscall_cmp,  "name" },
                { syscall_cmp,  "syscall" },
                { syscall_cmp,  "syscall_name" },
index 1437bb72520b6f5db821dff16809b96db2faea64..3ac46bacc18852cd2b04c15bee5e3d74f3e11034 100644 (file)
@@ -796,6 +796,7 @@ Sort the output of the histogram printed by the
 option by the specified criterion.  Legal values are
 .BR time " (or " time_total " or " total_time ),
 .BR calls " (or " count ),
+.BR errors " (or " error ),
 .BR name " (or " syscall " or " syscall_name ),
 and
 .BR nothing " (or " none );
index 59097e1408f56189e81bec34ad876e622b5aa463..8d9e465c7a950e63e1b7351e2b564e84747c40b1 100644 (file)
--- a/strace.c
+++ b/strace.c
@@ -276,7 +276,8 @@ Statistics:\n\
                  summary\n\
   -C             like -c but also print regular output\n\
   -O overhead    set overhead for tracing syscalls to OVERHEAD usecs\n\
-  -S sortby      sort syscall counts by: time, calls, name, nothing (default %s)\n\
+  -S sortby      sort syscall counts by: time, calls, errors, name, nothing\n\
+                 (default %s)\n\
   -w             summarise syscall latency (default is system time)\n\
 \n\
 Filtering:\n\
index 25f095e23e24a7b4c6c80afad3b7ecf2a5eae193..55a01c497342e4c0d7d8190e49f3f06402fc1b73 100755 (executable)
@@ -43,3 +43,7 @@ for s in name syscall syscall_name; do
        test_c "$s" '' \
                '/^[[:space:]]+[0-9]/ s/^'"$c$c$c$c"'([[:space:]]+[0-9]+)?'"$c"'$/\6/p'
 done
+for s in error errors; do
+       test_c "$s" '-n -r' \
+               '/^[[:space:]]+[0-9]/ s/^'"$c$c$c$c"'([[:space:]]+([0-9]+))?'"$c"'$/\6/p'
+done