=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/procname.c,v retrieving revision 1.5 retrieving revision 1.6 diff -c -r1.5 -r1.6 *** src/usr.bin/tmux/procname.c 2009/08/09 15:17:50 1.5 --- src/usr.bin/tmux/procname.c 2009/12/24 22:29:15 1.6 *************** *** 1,4 **** ! /* $OpenBSD: procname.c,v 1.5 2009/08/09 15:17:50 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: procname.c,v 1.6 2009/12/24 22:29:15 guenther Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott *************** *** 34,47 **** #define is_stopped(p) \ ((p)->p_stat == SSTOP || (p)->p_stat == SZOMB || (p)->p_stat == SDEAD) ! struct proc *cmp_procs(struct proc *, struct proc *); char *get_proc_name(int, char *); ! struct proc * ! cmp_procs(struct proc *p1, struct proc *p2) { - void *ptr1, *ptr2; - if (is_runnable(p1) && !is_runnable(p2)) return (p1); if (!is_runnable(p1) && is_runnable(p2)) --- 34,45 ---- #define is_stopped(p) \ ((p)->p_stat == SSTOP || (p)->p_stat == SZOMB || (p)->p_stat == SDEAD) ! struct kinfo_proc2 *cmp_procs(struct kinfo_proc2 *, struct kinfo_proc2 *); char *get_proc_name(int, char *); ! struct kinfo_proc2 * ! cmp_procs(struct kinfo_proc2 *p1, struct kinfo_proc2 *p2) { if (is_runnable(p1) && !is_runnable(p2)) return (p1); if (!is_runnable(p1) && is_runnable(p2)) *************** *** 67,79 **** if (!(p1->p_flag & P_SINTR) && (p2->p_flag & P_SINTR)) 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) return (p1); if (strcmp(p1->p_comm, p2->p_comm) > 0) --- 65,70 ---- *************** *** 87,97 **** char * get_proc_name(int fd, char *tty) { ! int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PGRP, 0 }; struct stat sb; size_t len; ! struct kinfo_proc *buf, *newbuf; ! struct proc *bestp; u_int i; char *name; --- 78,88 ---- char * get_proc_name(int fd, char *tty) { ! int mib[6] = { CTL_KERN, KERN_PROC2, KERN_PROC_PGRP, 0, ! sizeof(struct kinfo_proc2), 0 }; struct stat sb; size_t len; ! struct kinfo_proc2 *buf, *newbuf, *bestp; u_int i; char *name; *************** *** 111,116 **** --- 102,108 ---- goto error; buf = newbuf; + mib[5] = (int)(len / sizeof(struct kinfo_proc2)); if (sysctl(mib, nitems(mib), buf, &len, NULL, 0) == -1) { if (errno == ENOMEM) goto retry; *************** *** 118,130 **** } bestp = NULL; ! for (i = 0; i < len / sizeof (struct kinfo_proc); i++) { ! if (buf[i].kp_eproc.e_tdev != sb.st_rdev) continue; if (bestp == NULL) ! bestp = &buf[i].kp_proc; else ! bestp = cmp_procs(&buf[i].kp_proc, bestp); } name = NULL; --- 110,122 ---- } bestp = NULL; ! for (i = 0; i < len / sizeof (struct kinfo_proc2); i++) { ! if ((dev_t)buf[i].p_tdev != sb.st_rdev) continue; if (bestp == NULL) ! bestp = &buf[i]; else ! bestp = cmp_procs(&buf[i], bestp); } name = NULL;