Author: jhb
Date: Fri Mar  1 01:02:28 2013
New Revision: 247516
URL: http://svnweb.freebsd.org/changeset/base/247516

Log:
  MFC 245610,245633,245635:
  Include the thread name along with the command name when displaying the
  command name of a thread from a multi-threaded process that doesn't have
  an available argument list (such as kernel processes) and threads display
  is enabled via -H.

Modified:
  stable/9/bin/ps/extern.h
  stable/9/bin/ps/fmt.c
  stable/9/bin/ps/ps.c
  stable/9/usr.bin/w/w.c
Directory Properties:
  stable/9/bin/ps/   (props changed)
  stable/9/usr.bin/w/   (props changed)

Modified: stable/9/bin/ps/extern.h
==============================================================================
--- stable/9/bin/ps/extern.h    Fri Mar  1 01:02:26 2013        (r247515)
+++ stable/9/bin/ps/extern.h    Fri Mar  1 01:02:28 2013        (r247516)
@@ -51,7 +51,7 @@ char   *elapsed(KINFO *, VARENT *);
 char    *elapseds(KINFO *, VARENT *);
 char    *emulname(KINFO *, VARENT *);
 VARENT *find_varentry(VAR *);
-const   char *fmt_argv(char **, char *, size_t);
+const   char *fmt_argv(char **, char *, char *, size_t);
 double  getpcpu(const KINFO *);
 char    *kvar(KINFO *, VARENT *);
 char    *label(KINFO *, VARENT *);

Modified: stable/9/bin/ps/fmt.c
==============================================================================
--- stable/9/bin/ps/fmt.c       Fri Mar  1 01:02:26 2013        (r247515)
+++ stable/9/bin/ps/fmt.c       Fri Mar  1 01:02:28 2013        (r247516)
@@ -105,7 +105,7 @@ cmdpart(char *arg0)
 }
 
 const char *
-fmt_argv(char **argv, char *cmd, size_t maxlen)
+fmt_argv(char **argv, char *cmd, char *thread, size_t maxlen)
 {
        size_t len;
        char *ap, *cp;
@@ -122,9 +122,14 @@ fmt_argv(char **argv, char *cmd, size_t 
        cp = malloc(len);
        if (cp == NULL)
                errx(1, "malloc failed");
-       if (ap == NULL)
-               sprintf(cp, "[%.*s]", (int)maxlen, cmd);
-       else if (strncmp(cmdpart(argv[0]), cmd, maxlen) != 0)
+       if (ap == NULL) {
+               if (thread != NULL) {
+                       asprintf(&ap, "%s/%s", cmd, thread);
+                       sprintf(cp, "[%.*s]", (int)maxlen, ap);
+                       free(ap);
+               } else
+                       sprintf(cp, "[%.*s]", (int)maxlen, cmd);
+       } else if (strncmp(cmdpart(argv[0]), cmd, maxlen) != 0)
                sprintf(cp, "%s (%.*s)", ap, (int)maxlen, cmd);
        else
                strcpy(cp, ap);

Modified: stable/9/bin/ps/ps.c
==============================================================================
--- stable/9/bin/ps/ps.c        Fri Mar  1 01:02:26 2013        (r247515)
+++ stable/9/bin/ps/ps.c        Fri Mar  1 01:02:28 2013        (r247516)
@@ -140,7 +140,7 @@ static void  format_output(KINFO *);
 static void    *expand_list(struct listinfo *);
 static const char *
                 fmt(char **(*)(kvm_t *, const struct kinfo_proc *, int),
-                   KINFO *, char *, int);
+                   KINFO *, char *, char *, int);
 static void     free_list(struct listinfo *);
 static void     init_list(struct listinfo *, addelem_rtn, int, const char *);
 static char    *kludge_oldps_options(const char *, char *, const char *);
@@ -1161,11 +1161,12 @@ sizevars(void)
 
 static const char *
 fmt(char **(*fn)(kvm_t *, const struct kinfo_proc *, int), KINFO *ki,
-    char *comm, int maxlen)
+    char *comm, char *thread, int maxlen)
 {
        const char *s;
 
-       s = fmt_argv((*fn)(kd, ki->ki_p, termwidth), comm, maxlen);
+       s = fmt_argv((*fn)(kd, ki->ki_p, termwidth), comm,
+           showthreads && ki->ki_p->ki_numthreads > 1 ? thread : NULL, maxlen);
        return (s);
 }
 
@@ -1193,7 +1194,7 @@ saveuser(KINFO *ki)
                        ki->ki_args = strdup("<defunct>");
                else if (UREADOK(ki) || (ki->ki_p->ki_args != NULL))
                        ki->ki_args = strdup(fmt(kvm_getargv, ki,
-                           ki->ki_p->ki_comm, MAXCOMLEN));
+                           ki->ki_p->ki_comm, ki->ki_p->ki_tdname, MAXCOMLEN));
                else
                        asprintf(&ki->ki_args, "(%s)", ki->ki_p->ki_comm);
                if (ki->ki_args == NULL)
@@ -1204,7 +1205,7 @@ saveuser(KINFO *ki)
        if (needenv) {
                if (UREADOK(ki))
                        ki->ki_env = strdup(fmt(kvm_getenvv, ki,
-                           (char *)NULL, 0));
+                           (char *)NULL, (char *)NULL, 0));
                else
                        ki->ki_env = strdup("()");
                if (ki->ki_env == NULL)

Modified: stable/9/usr.bin/w/w.c
==============================================================================
--- stable/9/usr.bin/w/w.c      Fri Mar  1 01:02:26 2013        (r247515)
+++ stable/9/usr.bin/w/w.c      Fri Mar  1 01:02:28 2013        (r247516)
@@ -124,7 +124,7 @@ static struct stat  *ttystat(char *);
 static void             usage(int);
 static int              this_is_uptime(const char *s);
 
-char *fmt_argv(char **, char *, int);  /* ../../bin/ps/fmt.c */
+char *fmt_argv(char **, char *, char *, size_t);       /* ../../bin/ps/fmt.c */
 
 int
 main(int argc, char *argv[])
@@ -321,7 +321,7 @@ main(int argc, char *argv[])
                        continue;
                }
                ep->args = fmt_argv(kvm_getargv(kd, ep->kp, argwidth),
-                   ep->kp->ki_comm, MAXCOMLEN);
+                   ep->kp->ki_comm, NULL, MAXCOMLEN);
                if (ep->args == NULL)
                        err(1, NULL);
        }
@@ -405,7 +405,7 @@ main(int argc, char *argv[])
                                const char *ptr;
 
                                ptr = fmt_argv(kvm_getargv(kd, dkp, argwidth),
-                                   dkp->ki_comm, MAXCOMLEN);
+                                   dkp->ki_comm, NULL, MAXCOMLEN);
                                if (ptr == NULL)
                                        ptr = "-";
                                (void)printf("\t\t%-9d %s\n",
_______________________________________________
svn-src-stable-9@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-stable-9
To unsubscribe, send any mail to "svn-src-stable-9-unsubscr...@freebsd.org"

Reply via email to