Mercurial > hg > octave-nkf > gnulib-hg
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;