Author: kaktus
Date: Sun Jul 19 15:16:57 2020
New Revision: 363326
URL: https://svnweb.freebsd.org/changeset/base/363326

Log:
  MFC r362947
  
  truss: print more information about traced sysctls

Modified:
  stable/12/usr.bin/truss/syscalls.c

Modified: stable/12/usr.bin/truss/syscalls.c
==============================================================================
--- stable/12/usr.bin/truss/syscalls.c  Sun Jul 19 15:16:27 2020        
(r363325)
+++ stable/12/usr.bin/truss/syscalls.c  Sun Jul 19 15:16:57 2020        
(r363326)
@@ -1558,14 +1558,37 @@ print_cmsgs(FILE *fp, pid_t pid, bool receive, struct 
 }
 
 static void
-print_sysctl_oid(FILE *fp, int *oid, int len)
+print_sysctl_oid(FILE *fp, int *oid, size_t len)
 {
-       int i;
+       size_t i;
+       bool first;
 
-       for (i = 0; i < len; i++)
-               fprintf(fp, ".%d", oid[i]);
+       first = true;
+       fprintf(fp, "{ ");
+       for (i = 0; i < len; i++) {
+               fprintf(fp, "%s%d", first ? "" : ".", oid[i]);
+               first = false;
+       }
+       fprintf(fp, " }");
 }
 
+static void
+print_sysctl(FILE *fp, int *oid, size_t len)
+{
+       char name[BUFSIZ];
+       int qoid[CTL_MAXNAME + 2];
+       size_t i;
+
+       qoid[0] = CTL_SYSCTL;
+       qoid[1] = CTL_SYSCTL_NAME;
+       memcpy(qoid + 2, oid, len * sizeof(int));
+       i = sizeof(name);
+       if (sysctl(qoid, len + 2, name, &i, 0, 0) == -1)
+               print_sysctl_oid(fp, oid, len);
+       else
+               fprintf(fp, "%s", name);
+}
+
 /*
  * Converts a syscall argument into a string.  Said string is
  * allocated via malloc(), so needs to be free()'d.  sc is
@@ -2277,9 +2300,8 @@ print_arg(struct syscall_args *sc, unsigned long *args
                break;
        case Sysctl: {
                char name[BUFSIZ];
-               int oid[CTL_MAXNAME + 2], qoid[CTL_MAXNAME + 2];
-               size_t i;
-               int len;
+               int oid[CTL_MAXNAME + 2];
+               size_t len;
 
                memset(name, 0, sizeof(name));
                len = args[sc->offset + 1];
@@ -2293,39 +2315,35 @@ print_arg(struct syscall_args *sc, unsigned long *args
                                        fprintf(fp, "debug");
                                        break;
                                case CTL_SYSCTL_NAME:
-                                       fprintf(fp, "name");
+                                       fprintf(fp, "name ");
                                        print_sysctl_oid(fp, oid + 2, len - 2);
                                        break;
                                case CTL_SYSCTL_NEXT:
                                        fprintf(fp, "next");
                                        break;
                                case CTL_SYSCTL_NAME2OID:
-                                       fprintf(fp, "name2oid");
+                                       fprintf(fp, "name2oid %s",
+                                           get_string(pid,
+                                               (void *)args[sc->offset + 4],
+                                               args[sc->offset + 5]));
                                        break;
                                case CTL_SYSCTL_OIDFMT:
-                                       fprintf(fp, "oidfmt");
-                                       print_sysctl_oid(fp, oid + 2, len - 2);
+                                       fprintf(fp, "oidfmt ");
+                                       print_sysctl(fp, oid + 2, len - 2);
                                        break;
                                case CTL_SYSCTL_OIDDESCR:
-                                       fprintf(fp, "oiddescr");
-                                       print_sysctl_oid(fp, oid + 2, len - 2);
+                                       fprintf(fp, "oiddescr ");
+                                       print_sysctl(fp, oid + 2, len - 2);
                                        break;
                                case CTL_SYSCTL_OIDLABEL:
-                                       fprintf(fp, "oidlabel");
-                                       print_sysctl_oid(fp, oid + 2, len - 2);
+                                       fprintf(fp, "oidlabel ");
+                                       print_sysctl(fp, oid + 2, len - 2);
                                        break;
                                default:
-                                       print_sysctl_oid(fp, oid + 1, len - 1);
+                                       print_sysctl(fp, oid + 1, len - 1);
                                }
                        } else {
-                               qoid[0] = CTL_SYSCTL;
-                               qoid[1] = CTL_SYSCTL_NAME;
-                               memcpy(qoid + 2, oid, len * sizeof(int));
-                               i = sizeof(name);
-                               if (sysctl(qoid, len + 2, name, &i, 0, 0) == -1)
-                                       print_sysctl_oid(fp, qoid + 2, len);
-                               else
-                                       fprintf(fp, "%s", name);
+                               print_sysctl(fp, oid, len);
                        }
                        fprintf(fp, "\"");
                }
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to