From 7962cb627089f5fd1feee6881e20ed4270308c5a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?=
 <grubba@grubba.org>
Date: Thu, 2 Jul 1998 21:49:59 +0200
Subject: [PATCH] Fixed a few bugs in the POSIX readdir_r() handling.

Rev: src/modules/files/efuns.c:1.55
---
 src/modules/files/efuns.c | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/src/modules/files/efuns.c b/src/modules/files/efuns.c
index 55cb1a7d01..ab19180037 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++)
       {
-- 
GitLab