From eaf8d94fac5ab4ddfd6a5966a55a4178656d4011 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 09:54:48 +0100 Subject: [PATCH] Fixed even more bugs in get_dir. Rev: src/modules/files/efuns.c:1.8 --- src/modules/files/efuns.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/modules/files/efuns.c b/src/modules/files/efuns.c index 0b9fb3d8f9..a70dc95e61 100644 --- a/src/modules/files/efuns.c +++ b/src/modules/files/efuns.c @@ -186,13 +186,24 @@ void f_get_dir(INT32 args) while(1) { int e; - struct dirent tmp; + struct dirent *tmp; int num_files=0; char *bufptr=buffer; THREADS_ALLOW(); + + if (!(tmp = alloca(pathconf(path, _PC_NAME_MAX) + 1))) { + error("get_dir(): Out of memory!\n"); + } + while(1) { - d=readdir_r(dir, &tmp); + /* Should have code for the POSIX variant here also */ + do { + d=readdir_r(dir, tmp); + } while ((!d) && ((errno == EAGAIN)||(errno == EINTR))); + if (!d) { + error("get_dir(): readdir_r() failed: %d\n", errno); + } if(d->d_name[0]=='.') { if(!d->d_name[1]) continue; -- GitLab