autoupdate
[gnulib.git] / ChangeLog
index 83166c3..a245570 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,69 @@
+2011-08-23  Bruno Haible  <bruno@clisp.org>
+
+       tmpdir: Use a good default directory on native Windows.
+       * lib/tmpdir.c: Include <windows.h>, pathmax.h.
+       (P_tmpdir): Default to _P_tmpdir on native Windows.
+       (path_search): On native Windows, try the value returned by GetTempPath
+       before trying P_tmpdir.
+       * modules/tmpdir (Depends-on): Add pathmax.
+       Suggested by John Darrington <john@darrington.wattle.id.au>.
+
+2011-08-20  Reuben Thomas  <rrt@sc3d.org>
+
+       doc: fix typo in README-release
+       * top/README-release: Capitalize first word of a sentence.
+
 2011-08-19  Jim Meyering  <meyering@redhat.com>
 
+       fts: do not exhaust memory when processing million-entry directories
+       Before this change, traversing (via rm -rf, find, du, etc.) an N-entry
+       directory would require about 256*N bytes of memory.  Thus, it was
+       easy to construct a directory too large to be processed by any of
+       those tools.  With this change, fts' maximum memory utilization is
+       now limited to around 30MB.
+       * lib/fts.c (FTS_MAX_READDIR_ENTRIES): Define.
+       (fts_read): When we've processed the final entry (i.e., when
+       ->fts_link is NULL) and fts_dirp is non-NULL, call fts_build
+       using the parent entry to read any remaining entries.  Dispatch
+       depending on what fts_build returns:
+       - NULL+stop, aka failure: stop
+       - NULL otherwise: move up in the dir hierarchy
+       - non-NULL: handle this new entry
+       (fts_build): Declare and use new local, continue_readdir.
+       Prepare to be called from fts_read, when the entries
+       from a partially-read directory have just been exhausted.
+       In that case, we'll skip the opendir and instead use the parent's
+       fts_dirp and derive dir_fd from that.
+       Finally, in the readdir loop, if we read max_entries entries,
+       exit the loop ensuring *not* to call closedir.  This is required
+       so that fts_dirp can be reused on a subsequent call.
+       Prompted by Ben England's report of memory exhaustion in find
+       and rm -rf vs. NFS: https://bugzilla.redhat.com/719749.
+
+       maint: fts: move decl of `dp' down into while loop; split a long line
+       * lib/fts.c (fts_build): No semantic change.
+
+       fts: add/use new struct member, fts_dirp
+       We are about to use this to manage any directory with
+       too many entries to read all of them into memory at once.
+       To do that, we'll need to save the DIR* pointer in each
+       affected FTSENT struct.
+       * lib/fts_.h: Include <dirent.h>.
+       (struct FTSENT) [fts_dirp]: New member.
+       * lib/fts.c (closedir_and_clear): Define.
+       Use it in place of closedir so that we are sure to
+       clear the new fts_dirp member when done with it.
+       (fts_alloc): Initialize the new member.
+       (fts_lfree): Free, if needed.
+
+       maint: fts: give __opendir2 a new parameter and rename
+       * lib/fts.c (__opendir2): Give it a new parameter, Pdir_fd, rather
+       than surreptitiously using sole caller's "dir_fd".
+       (fts_opendir): Rename from __opendir2.
+
+       maint: fts.c: remove __opendir2's now-unused parameter, oflag
+       * lib/fts.c (__opendir2): Remove unused parameter, oflag.
+
        maint: fts.c: correct off-by-one indentation
        * lib/fts.c (fts_build): Correct indentation, change style
        of a couple of block comments, and bracing style.