cvsdist ac03dea
--- bsd-finger-0.17/finger/finger.c.utmp	2004-06-15 11:38:24.000000000 -0400
cvsdist ac03dea
+++ bsd-finger-0.17/finger/finger.c	2004-06-15 12:22:15.000000000 -0400
cvsdist ac03dea
@@ -75,6 +75,8 @@
cvsdist ac03dea
 #include <limits.h>
cvsdist ac03dea
 #include <time.h>
cvsdist ac03dea
 #include <getopt.h>
cvsdist ac03dea
+#include <signal.h>
cvsdist ac03dea
+#include <errno.h>
cvsdist ac03dea
 #include "finger.h"
cvsdist ac03dea
 #ifdef _USAGI
cvsdist ac03dea
 #include "version.h"
cvsdist ac03dea
@@ -224,6 +226,8 @@
cvsdist ac03dea
 #ifdef USER_PROCESS
cvsdist ac03dea
 		if (uptr->ut_type != USER_PROCESS) continue;
cvsdist ac03dea
 #endif
cvsdist ac03dea
+		if (kill(uptr->ut_pid, 0) < 0 && errno == ESRCH)
cvsdist ac03dea
+			continue;
cvsdist ac03dea
 		if ((pn = find_person(uptr->ut_name)) == NULL) {
cvsdist ac03dea
 			memcpy(name, uptr->ut_name, UT_NAMESIZE);
cvsdist ac03dea
 			if ((pw = getpwnam(name)) == NULL)
cvsdist ac03dea
@@ -331,6 +335,8 @@
cvsdist ac03dea
 #ifdef USER_PROCESS
cvsdist ac03dea
 		if (uptr->ut_type != USER_PROCESS) continue;
cvsdist ac03dea
 #endif
cvsdist ac03dea
+		if (kill(uptr->ut_pid, 0) < 0 && errno == ESRCH)
cvsdist ac03dea
+			continue;
cvsdist ac03dea
 		if ((pn = find_person(uptr->ut_name)) == NULL) {
cvsdist ac03dea
 			continue;
cvsdist ac03dea
 		}
cvsdist ac03dea
--- bsd-finger-0.17/finger/util.c.utmp	2004-06-15 11:38:24.000000000 -0400
cvsdist ac03dea
+++ bsd-finger-0.17/finger/util.c	2004-06-15 11:38:24.000000000 -0400
cvsdist ac03dea
@@ -71,6 +71,8 @@
cvsdist ac03dea
 	}
cvsdist ac03dea
 	snprintf(tbuf, TBUFLEN, "%s/%s", _PATH_DEV, w->tty);
cvsdist ac03dea
 	if (stat(tbuf, &sb) < 0) {
cvsdist ac03dea
+	    w->idletime = 0;  /* No tty no write, no idle data */
cvsdist ac03dea
+	    w->writable = 0;
cvsdist ac03dea
 	    switch (errno) {
cvsdist ac03dea
 	    case ENOENT:
cvsdist ac03dea
 		break;