aboutsummaryrefslogtreecommitdiffstats
path: root/ChangeLog
diff options
context:
space:
mode:
authorPaul Eggert2013-01-31 22:30:51 -0800
committerPaul Eggert2013-01-31 22:30:51 -0800
commit8654f9d7d6d7c3ee97232a34a40250dcbc57af8e (patch)
treeff488081b57dabdfe7e85c11a34e8ac522b5bdb4 /ChangeLog
parent44b12dd6994a6214b9d6f73539b441080611369b (diff)
downloademacs-8654f9d7d6d7c3ee97232a34a40250dcbc57af8e.tar.gz
emacs-8654f9d7d6d7c3ee97232a34a40250dcbc57af8e.zip
Use fdopendir, fstatat and readlinkat, for efficiency.
On my host, this speeds up directory-files-and-attributes by a factor of 3, when applied to Emacs's src directory. These functions are standardized by POSIX and are common these days; fall back on a (slower) gnulib implementation if the host is too old to supply them. * .bzrignore: Add lib/dirent.h. * lib/Makefile.am (libgnu_a_SOURCES): Add openat-die.c, save-cwd.c. * lib/careadlinkat.c, lib/careadlinkat.h: Merge from gnulib, incorporating: 2013-01-29 careadlinkat: do not provide careadlinkatcwd. * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate. * lib/dirent.in.h, lib/fdopendir.c, lib/fstatat.c, lib/openat-priv.h: * lib/openat-proc.c, lib/openat.h, m4/dirent_h.m4, m4/fdopendir.m4: * m4/fstatat.m4: New files, from gnulib. * lib/openat-die.c, lib/save-cwd.c, lib/save-cwd.h: New files. These last three are specific to Emacs and are not copied from gnulib. They are simpler than the gnulib versions and are tuned for Emacs. * admin/merge-gnulib (GNULIB_MODULES): Add fdopendir, fstatat, readlinkat. (GNULIB_TOOL_FLAGS): Do not avoid at-internal, openat-h. Avoid dup, open, opendir. * nt/inc/sys/stat.h (fstatat): * nt/inc/unistd.h (readlinkat): New decls. * src/conf_post.h (GNULIB_SUPPORT_ONLY_AT_FDCWD): Remove. * src/dired.c: Include <fcntl.h>. (open_directory): New function, which uses open and fdopendir rather than opendir. DOS_NT platforms still use opendir, though. (directory_files_internal, file_name_completion): Use it. (file_attributes): New function, with most of the old Ffile_attributes. (directory_files_internal, Ffile_attributes): Use it. (file_attributes, file_name_completion_stat): First arg is now fd, not dir name. All uses changed. Use fstatat rather than lstat + stat. (file_attributes): Use emacs_readlinkat rather than Ffile_symlink_p. * src/fileio.c: Include <allocator.h>, <careadlinkat.h>. (emacs_readlinkat): New function, with much of the old Ffile_symlink_p, but with an fd argument for speed. It uses readlinkat rather than careadlinkatcwd, so that it need not assume the working directory. (Ffile_symlink_p): Use it. * src/filelock.c (current_lock_owner): Use emacs_readlinkat rather than emacs_readlink. * src/lisp.h (emacs_readlinkat): New decl. (READLINK_BUFSIZE, emacs_readlink): Remove. * src/sysdep.c: Do not include <allocator.h>, <careadlinkat.h>. (emacs_norealloc_allocator, emacs_readlink): Remove. This stuff is moved to fileio.c. * src/w32.c (fstatat, readlinkat): New functions. (careadlinkat): Don't check that fd == AT_FDCWD. (careadlinkatcwd): Remove; no longer needed. Fixes: debbugs:13539
Diffstat (limited to 'ChangeLog')
-rw-r--r--ChangeLog20
1 files changed, 20 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index ec25d5f7a7b..c510360e30f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,23 @@
12013-02-01 Paul Eggert <eggert@cs.ucla.edu>
2
3 Use fdopendir, fstatat and readlinkat, for efficiency (Bug#13539).
4 On my host, this speeds up directory-files-and-attributes by a
5 factor of 3, when applied to Emacs's src directory.
6 These functions are standardized by POSIX and are common these
7 days; fall back on a (slower) gnulib implementation if the host
8 is too old to supply them.
9 * .bzrignore: Add lib/dirent.h.
10 * lib/Makefile.am (libgnu_a_SOURCES): Add openat-die.c, save-cwd.c.
11 * lib/careadlinkat.c, lib/careadlinkat.h: Merge from gnulib,
12 incorporating: 2013-01-29 careadlinkat: do not provide careadlinkatcwd.
13 * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate.
14 * lib/dirent.in.h, lib/fdopendir.c, lib/fstatat.c, lib/openat-priv.h:
15 * lib/openat-proc.c, lib/openat.h, m4/dirent_h.m4, m4/fdopendir.m4:
16 * m4/fstatat.m4: New files, from gnulib.
17 * lib/openat-die.c, lib/save-cwd.c, lib/save-cwd.h: New files.
18 These last three are specific to Emacs and are not copied from gnulib.
19 They are simpler than the gnulib versions and are tuned for Emacs.
20
12013-02-01 Glenn Morris <rgm@gnu.org> 212013-02-01 Glenn Morris <rgm@gnu.org>
2 22
3 * make-dist: Only README files exist in lisp/ now, not README*. 23 * make-dist: Only README files exist in lisp/ now, not README*.