diff --git a/src/modules/files/efuns.c b/src/modules/files/efuns.c
index 55cb1a7d01c021515b988f02c2ed4ebe4e389d94..ab191800377f7d67f8d67bb5f705db59b569683d 100644
--- a/src/modules/files/efuns.c
+++ b/src/modules/files/efuns.c
@@ -22,7 +22,7 @@
 #include "file_machine.h"
 #include "file.h"
 
-RCSID("$Id: efuns.c,v 1.54 1998/07/02 18:59:29 grubba Exp $");
+RCSID("$Id: efuns.c,v 1.55 1998/07/02 19:49:59 grubba Exp $");
 
 #ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
@@ -456,7 +456,11 @@ void f_get_dir(INT32 args)
 	if (!d) {
 	  /* Solaris readdir_r seems to set errno to ENOENT sometimes.
 	   */
-	  err = (errno == ENOENT)?0:errno;
+	  if (errno == ENOENT) {
+	    err = 0;
+	  } else {
+	    err = errno;
+	  }
 	  break;
 	}
 #elif defined(HAVE_HPUX_READDIR_R)
@@ -477,7 +481,16 @@ void f_get_dir(INT32 args)
 	/* POSIX readdir_r returns 0 on success, and ERRNO on failure.
 	 * at end of dir it sets the third arg to NULL.
 	 */
+	d = NULL;
 	if ((err = readdir_r(dir, tmp, &d)) || !d) {
+	  if (err == -1) {
+	    err = errno;
+	  }
+	  /* Solaris readdir_r seems to set errno to ENOENT sometimes.
+	   */
+	  if (err == ENOENT) {
+	    err = 0;
+	  }
 	  break;
 	}
 #else
@@ -498,7 +511,7 @@ void f_get_dir(INT32 args)
       }
       THREADS_DISALLOW();
       if ((!d) && err) {
-	error("get_dir(): readdir_r() failed: %d\n", err);
+	error("get_dir(): readdir_r(\"%s\") failed: %d\n", path, err);
       }
       for(e=0;e<num_files;e++)
       {