diff --git a/src/modules/files/efuns.c b/src/modules/files/efuns.c
index 9ef8ce799f711286b30d818590c183d5ee095718..0b9fb3d8f9bc62b9dbc57a1ed9dbee0af93f29b6 100644
--- a/src/modules/files/efuns.c
+++ b/src/modules/files/efuns.c
@@ -180,7 +180,7 @@ void f_get_dir(INT32 args)
   {
 #define FPR 1024
     char buffer[MAXPATHLEN * 4];
-    char ptrs[FPR];
+    char *ptrs[FPR];
     int lens[FPR];
     
     while(1)
@@ -200,16 +200,16 @@ void f_get_dir(INT32 args)
 	}
 	if(num_files >= FPR) break;
 	lens[num_files]=NAMLEN(d);
-	if(ptr+lens[num_files] >= buffer+sizeof(buffer)) break;
-	MEMCPY(ptr, d->d_name, lens[num_files]);
-	ptrs[num_files]=ptr;
-	ptr+=len;
+	if(bufptr+lens[num_files] >= buffer+sizeof(buffer)) break;
+	MEMCPY(bufptr, d->d_name, lens[num_files]);
+	ptrs[num_files]=bufptr;
+	bufptr+=lens[num_files];
 	num_files++;
       }
       THREADS_DISALLOW();
       for(e=0;e<num_files;e++)
       {
-	push_string(make_shared_string(ptrs[e],lens[e]));
+	push_string(make_shared_binary_string(ptrs[e],lens[e]));
       }
       if(d)
 	push_string(make_shared_binary_string(d->d_name,NAMLEN(d)));