svn commit: r247517 - in stable/8: bin/ps usr.bin/w

John Baldwin jhb at FreeBSD.org
Fri Mar 1 01:02:46 UTC 2013


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

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/8/bin/ps/extern.h
  stable/8/bin/ps/fmt.c
  stable/8/bin/ps/ps.c
  stable/8/usr.bin/w/w.c
Directory Properties:
  stable/8/bin/ps/   (props changed)
  stable/8/usr.bin/w/   (props changed)

Modified: stable/8/bin/ps/extern.h
==============================================================================
--- stable/8/bin/ps/extern.h	Fri Mar  1 01:02:28 2013	(r247516)
+++ stable/8/bin/ps/extern.h	Fri Mar  1 01:02:44 2013	(r247517)
@@ -50,7 +50,7 @@ int	 donlist(void);
 void	 elapsed(KINFO *, VARENT *);
 void	 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 *);
 void	 kvar(KINFO *, VARENT *);
 void	 label(KINFO *, VARENT *);

Modified: stable/8/bin/ps/fmt.c
==============================================================================
--- stable/8/bin/ps/fmt.c	Fri Mar  1 01:02:28 2013	(r247516)
+++ stable/8/bin/ps/fmt.c	Fri Mar  1 01:02:44 2013	(r247517)
@@ -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/8/bin/ps/ps.c
==============================================================================
--- stable/8/bin/ps/ps.c	Fri Mar  1 01:02:28 2013	(r247516)
+++ stable/8/bin/ps/ps.c	Fri Mar  1 01:02:44 2013	(r247517)
@@ -143,7 +143,7 @@ static void	 dynsizevars(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 *);
@@ -1127,11 +1127,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);
 }
 
@@ -1159,7 +1160,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_ocomm, MAXCOMLEN));
 		else
 			asprintf(&ki->ki_args, "(%s)", ki->ki_p->ki_comm);
 		if (ki->ki_args == NULL)
@@ -1170,7 +1171,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/8/usr.bin/w/w.c
==============================================================================
--- stable/8/usr.bin/w/w.c	Fri Mar  1 01:02:28 2013	(r247516)
+++ stable/8/usr.bin/w/w.c	Fri Mar  1 01:02:44 2013	(r247517)
@@ -127,7 +127,7 @@ static struct stat	*ttystat(char *, int)
 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[])
@@ -325,7 +325,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);
 	}
@@ -392,7 +392,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",


More information about the svn-src-stable-8 mailing list