diff --git a/src/modules/files/efuns.c b/src/modules/files/efuns.c
index 058ec9e270ced3682e97bc62b0b5c2d731fa34ea..9a25d79e2ac286ce1699dee9334b1e120f44f7d3 100644
--- a/src/modules/files/efuns.c
+++ b/src/modules/files/efuns.c
@@ -190,10 +190,13 @@ void f_get_dir(INT32 args)
     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");
-    }
+    tmp = xalloc(sizeof(struct dirent) + 
+#ifdef HAVE_SOLARIS_READDIR_R
+		 pathconf(path, _PC_NAME_MAX)
+#else
+		 NAME_MAX
+#endif /* HAVE_SOLARIS_READDIR_R */
+		 + 1);
 
     while(1)
     {