mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-06 11:50:51 -08:00
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 |
||
|---|---|---|
| .. | ||
| 00gnulib.m4 | ||
| alloca.m4 | ||
| c-strtod.m4 | ||
| clock_time.m4 | ||
| close-stream.m4 | ||
| dirent_h.m4 | ||
| dup2.m4 | ||
| environ.m4 | ||
| euidaccess.m4 | ||
| execinfo.m4 | ||
| extensions.m4 | ||
| extern-inline.m4 | ||
| faccessat.m4 | ||
| fcntl_h.m4 | ||
| fdopendir.m4 | ||
| filemode.m4 | ||
| fpending.m4 | ||
| fstatat.m4 | ||
| getgroups.m4 | ||
| getloadavg.m4 | ||
| getopt.m4 | ||
| gettime.m4 | ||
| gettimeofday.m4 | ||
| gnulib-common.m4 | ||
| gnulib-comp.m4 | ||
| gnulib-tool.m4 | ||
| group-member.m4 | ||
| include_next.m4 | ||
| inttypes.m4 | ||
| largefile.m4 | ||
| longlong.m4 | ||
| lstat.m4 | ||
| manywarnings.m4 | ||
| md5.m4 | ||
| mktime.m4 | ||
| multiarch.m4 | ||
| nocrash.m4 | ||
| off_t.m4 | ||
| pathmax.m4 | ||
| pselect.m4 | ||
| pthread_sigmask.m4 | ||
| putenv.m4 | ||
| readlink.m4 | ||
| readlinkat.m4 | ||
| setenv.m4 | ||
| sha1.m4 | ||
| sha256.m4 | ||
| sha512.m4 | ||
| sig2str.m4 | ||
| signal_h.m4 | ||
| socklen.m4 | ||
| ssize_t.m4 | ||
| st_dm_mode.m4 | ||
| stat-time.m4 | ||
| stat.m4 | ||
| stdalign.m4 | ||
| stdarg.m4 | ||
| stdbool.m4 | ||
| stddef_h.m4 | ||
| stdint.m4 | ||
| stdio_h.m4 | ||
| stdlib_h.m4 | ||
| strftime.m4 | ||
| strtoimax.m4 | ||
| strtoll.m4 | ||
| strtoull.m4 | ||
| strtoumax.m4 | ||
| symlink.m4 | ||
| sys_select_h.m4 | ||
| sys_socket_h.m4 | ||
| sys_stat_h.m4 | ||
| sys_time_h.m4 | ||
| sys_types_h.m4 | ||
| time_h.m4 | ||
| time_r.m4 | ||
| timer_time.m4 | ||
| timespec.m4 | ||
| tm_gmtoff.m4 | ||
| unistd_h.m4 | ||
| utimbuf.m4 | ||
| utimens.m4 | ||
| utimes.m4 | ||
| warnings.m4 | ||
| wchar_t.m4 | ||