diff --git a/src/modules/files/efuns.c b/src/modules/files/efuns.c
index f63cd0daa26a73f4c9500f903faf7d6fb87002c4..3dab6e4a7311ad4083374e915e4e8a1d83f83839 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.62 1999/01/01 01:03:33 hubbe Exp $");
+RCSID("$Id: efuns.c,v 1.63 1999/02/07 16:29:04 grubba Exp $");
 
 #ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
@@ -517,14 +517,14 @@ void f_get_dir(INT32 args)
 
     if (!(tmp =
 #if defined(HAVE_SOLARIS_READDIR_R) || defined(_PC_NAME_MAX)
-	  alloca(sizeof(struct dirent) + 
+	  malloc(sizeof(struct dirent) + 
 		 ((pathconf(path, _PC_NAME_MAX) < 1024)?1024:
 		  pathconf(path, _PC_NAME_MAX)) + 1)
 #else
 #ifndef NAME_MAX
 #define NAME_MAX 1024
 #endif
-	  alloca(sizeof(struct dirent) + NAME_MAX+ 1024 + 1)
+	  malloc(sizeof(struct dirent) + NAME_MAX+ 1024 + 1)
 #endif /* HAVE_SOLARIS_READDIR_R */
       )) {
       closedir(dir);
@@ -638,6 +638,7 @@ void f_get_dir(INT32 args)
 	break;
     }
     THREADS_ALLOW();
+    free(tmp);
     closedir(dir);
     THREADS_DISALLOW();
     a=aggregate_array(sp-save_sp);