changeset 6437:12eea1649f15

* savedir.c (savedir): Don't assume that xrealloc etc. leave errno alone. Problem reported by Frederic Jolliton.
author Paul Eggert <eggert@cs.ucla.edu>
date Fri, 28 Oct 2005 23:02:35 +0000
parents fca6cdd9520b
children f9d5ad5c44c0
files lib/ChangeLog lib/savedir.c
diffstat 2 files changed, 16 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/lib/ChangeLog
+++ b/lib/ChangeLog
@@ -1,3 +1,8 @@
+2005-10-28  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* savedir.c (savedir): Don't assume that xrealloc etc. leave
+	errno alone.  Problem reported by Frederic Jolliton.
+
 2005-10-28  Simon Josefsson  <jas@extundo.com>
 
 	* inet_ntop.h, inet_ntop.c: Make it work under mingw32: Add
@@ -97,7 +102,7 @@
 
 2005-10-19  Simon Josefsson  <jas@extundo.com>
 
-	* gc.h, gc-gnulib.c, gc-libgcrypt.c: Support MD4. 
+	* gc.h, gc-gnulib.c, gc-libgcrypt.c: Support MD4.
 
 2005-10-18  Simon Josefsson  <jas@extundo.com>
 
--- a/lib/savedir.c
+++ b/lib/savedir.c
@@ -70,7 +70,6 @@
 savedir (const char *dir)
 {
   DIR *dirp;
-  struct dirent *dp;
   char *name_space;
   size_t allocated = NAME_SIZE_DEFAULT;
   size_t used = 0;
@@ -82,12 +81,19 @@
 
   name_space = xmalloc (allocated);
 
-  errno = 0;
-  while ((dp = readdir (dirp)) != NULL)
+  for (;;)
     {
+      struct dirent const *dp;
+      char const *entry;
+
+      errno = 0;
+      dp = readdir (dirp);
+      if (! dp)
+	break;
+
       /* Skip "", ".", and "..".  "" is returned by at least one buggy
          implementation: Solaris 2.4 readdir on NFS file systems.  */
-      char const *entry = dp->d_name;
+      entry = dp->d_name;
       if (entry[entry[0] != '.' ? 0 : entry[1] != '.' ? 1 : 2] != '\0')
 	{
 	  size_t entry_size = strlen (entry) + 1;