From 1935e6df3d6a73e1585cbf232afaa8e93455d510 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?=
 <grubba@grubba.org>
Date: Wed, 22 Jan 1997 11:16:01 +0100
Subject: [PATCH] Moved the alloca in f_get_dir out of the loop. Doesn't throw
 an error when reaching the end of the directory any longer..

Rev: src/modules/files/efuns.c:1.10
---
 src/modules/files/efuns.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/modules/files/efuns.c b/src/modules/files/efuns.c
index a92ff6567e..75467c2094 100644
--- a/src/modules/files/efuns.c
+++ b/src/modules/files/efuns.c
@@ -182,19 +182,19 @@ void f_get_dir(INT32 args)
     char buffer[MAXPATHLEN * 4];
     char *ptrs[FPR];
     int lens[FPR];
+    struct dirent *tmp;
     
+    if (!(tmp = alloca(sizeof(struct dirent) + 
+		       pathconf(path, _PC_NAME_MAX) + 1))) {
+      error("get_dir(): Out of memory!\n");
+    }
+
     while(1)
     {
       int e;
-      struct dirent *tmp;
       int num_files=0;
       char *bufptr=buffer;
 
-      if (!(tmp = alloca(sizeof(struct dirent) + 
-			 pathconf(path, _PC_NAME_MAX) + 1))) {
-	error("get_dir(): Out of memory!\n");
-      }
-
       THREADS_ALLOW();
 
       while(1)
@@ -220,7 +220,7 @@ void f_get_dir(INT32 args)
 	num_files++;
       }
       THREADS_DISALLOW();
-      if (!d) {
+      if ((!d) && (errno != ENOENT)) {
 	error("get_dir(): readdir_r() failed: %d\n", errno);
       }
       for(e=0;e<num_files;e++)
-- 
GitLab