I keep doing `btrace -l | sort' to help myself searching for traces.

Would it be worh making btrace sort the list of probes
lexicographically in the first place or is there any value in seeing
them sorted by id?

Index: btrace.c
===================================================================
RCS file: /cvs/src/usr.sbin/btrace/btrace.c,v
retrieving revision 1.61
diff -u -p -r1.61 btrace.c
--- btrace.c    7 Dec 2021 22:17:03 -0000       1.61
+++ btrace.c    17 Jan 2022 14:13:27 -0000
@@ -62,7 +62,7 @@ char                  *read_btfile(const char *, size_t
  */
 void                    dtpi_cache(int);
 void                    dtpi_print_list(void);
-const char             *dtpi_func(struct dtioc_probe_info *);
+const char             *dtpi_func(const struct dtioc_probe_info *);
 int                     dtpi_is_unit(const char *);
 struct dtioc_probe_info        *dtpi_get_by_value(const char *, const char *,
                             const char *);
@@ -260,11 +260,26 @@ static int
 dtpi_cmp(const void *a, const void *b)
 {
        const struct dtioc_probe_info *ai = a, *bi = b;
+       int i;
 
-       if (ai->dtpi_pbn > bi->dtpi_pbn)
+       i = strcmp(ai->dtpi_prov, bi->dtpi_prov);
+       if (i > 0)
                return 1;
-       if (ai->dtpi_pbn < bi->dtpi_pbn)
+       if (i < 0)
                return -1;
+
+       i = strcmp(dtpi_func(ai), dtpi_func(bi));
+       if (i > 0)
+               return 1;
+       if (i < 0)
+               return -1;
+
+       i = strcmp(ai->dtpi_name, bi->dtpi_name);
+       if (i > 0)
+               return 1;
+       if (i < 0)
+               return -1;
+
        return 0;
 }
 
@@ -306,7 +321,7 @@ dtpi_print_list(void)
 }
 
 const char *
-dtpi_func(struct dtioc_probe_info *dtpi)
+dtpi_func(const struct dtioc_probe_info *dtpi)
 {
        char *sysnb, func[DTNAMESIZE];
        const char *errstr;

Reply via email to