[BACK]Return to procname.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / tmux

Diff for /src/usr.bin/tmux/procname.c between version 1.5 and 1.6

version 1.5, 2009/08/09 15:17:50 version 1.6, 2009/12/24 22:29:15
Line 34 
Line 34 
 #define is_stopped(p) \  #define is_stopped(p) \
         ((p)->p_stat == SSTOP || (p)->p_stat == SZOMB || (p)->p_stat == SDEAD)          ((p)->p_stat == SSTOP || (p)->p_stat == SZOMB || (p)->p_stat == SDEAD)
   
 struct proc     *cmp_procs(struct proc *, struct proc *);  struct kinfo_proc2      *cmp_procs(struct kinfo_proc2 *, struct kinfo_proc2 *);
 char            *get_proc_name(int, char *);  char            *get_proc_name(int, char *);
   
 struct proc *  struct kinfo_proc2 *
 cmp_procs(struct proc *p1, struct proc *p2)  cmp_procs(struct kinfo_proc2 *p1, struct kinfo_proc2 *p2)
 {  {
         void    *ptr1, *ptr2;  
   
         if (is_runnable(p1) && !is_runnable(p2))          if (is_runnable(p1) && !is_runnable(p2))
                 return (p1);                  return (p1);
         if (!is_runnable(p1) && is_runnable(p2))          if (!is_runnable(p1) && is_runnable(p2))
Line 67 
Line 65 
         if (!(p1->p_flag & P_SINTR) && (p2->p_flag & P_SINTR))          if (!(p1->p_flag & P_SINTR) && (p2->p_flag & P_SINTR))
                 return (p2);                  return (p2);
   
         ptr1 = LIST_FIRST(&p1->p_children);  
         ptr2 = LIST_FIRST(&p2->p_children);  
         if (ptr1 == NULL && ptr2 != NULL)  
                 return (p1);  
         if (ptr1 != NULL && ptr2 == NULL)  
                 return (p2);  
   
         if (strcmp(p1->p_comm, p2->p_comm) < 0)          if (strcmp(p1->p_comm, p2->p_comm) < 0)
                 return (p1);                  return (p1);
         if (strcmp(p1->p_comm, p2->p_comm) > 0)          if (strcmp(p1->p_comm, p2->p_comm) > 0)
Line 87 
Line 78 
 char *  char *
 get_proc_name(int fd, char *tty)  get_proc_name(int fd, char *tty)
 {  {
         int              mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PGRP, 0 };          int              mib[6] = { CTL_KERN, KERN_PROC2, KERN_PROC_PGRP, 0,
                                       sizeof(struct kinfo_proc2), 0 };
         struct stat      sb;          struct stat      sb;
         size_t           len;          size_t           len;
         struct kinfo_proc *buf, *newbuf;          struct kinfo_proc2 *buf, *newbuf, *bestp;
         struct proc     *bestp;  
         u_int            i;          u_int            i;
         char            *name;          char            *name;
   
Line 111 
Line 102 
                 goto error;                  goto error;
         buf = newbuf;          buf = newbuf;
   
           mib[5] = (int)(len / sizeof(struct kinfo_proc2));
         if (sysctl(mib, nitems(mib), buf, &len, NULL, 0) == -1) {          if (sysctl(mib, nitems(mib), buf, &len, NULL, 0) == -1) {
                 if (errno == ENOMEM)                  if (errno == ENOMEM)
                         goto retry;                          goto retry;
Line 118 
Line 110 
         }          }
   
         bestp = NULL;          bestp = NULL;
         for (i = 0; i < len / sizeof (struct kinfo_proc); i++) {          for (i = 0; i < len / sizeof (struct kinfo_proc2); i++) {
                 if (buf[i].kp_eproc.e_tdev != sb.st_rdev)                  if ((dev_t)buf[i].p_tdev != sb.st_rdev)
                         continue;                          continue;
                 if (bestp == NULL)                  if (bestp == NULL)
                         bestp = &buf[i].kp_proc;                          bestp = &buf[i];
                 else                  else
                         bestp = cmp_procs(&buf[i].kp_proc, bestp);                          bestp = cmp_procs(&buf[i], bestp);
         }          }
   
         name = NULL;          name = NULL;

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.6