]> git.ipfire.org Git - thirdparty/coreutils.git/commit
Rewrite fts.c not to change the current working directory,
authorJim Meyering <jim@meyering.net>
Tue, 17 Jan 2006 17:24:14 +0000 (17:24 +0000)
committerJim Meyering <jim@meyering.net>
Tue, 17 Jan 2006 17:24:14 +0000 (17:24 +0000)
commitc1994c16c24f860722d2bba529fe99041a774ad6
tree4db3cfe28c5ca822cf7ec0e24197aa44de19e574
parent739de8914fae814e11198abe20f629cbf50a7586
Rewrite fts.c not to change the current working directory,
by using openat, fstatat, fdopendir, etc..

[! _LIBC]: Include "openat.h" and "unistd--.h".
(HAVE_OPENAT_SUPPORT): Define.
[_LIBC] (fchdir): Don't undef or define; no longer used.
(FCHDIR): Define in terms of cwd_advance_fd rather than fchdir.
Now, this `function' always succeeds, and consumes its file descriptor
parameter -- so callers must not close such FDs.  Update callers.
(diropen_fd, opendirat, cwd_advance_fd): New functions.
(diropen): Add parameter, SP.  Adjust all callers.
Implement using diropen_fd, rather than open.
(fts_open): Initialize new member, fts_cwd_fd.
Remove fts_rft-setting code.
(fts_close): Close fts_cwd_fd, if necessary.
(__opendir2): Define in terms of opendir or opendirat,
depending on whether the FST_NOCHDIR flag is set.
(fts_build): Since fts_safe_changedir consumes its FD, and since
this code must do `closedir(dirp)', dup the dirfd(dirp) argument,
and close the dup'd file descriptor upon failure.
(fts_stat): Use fstatat(...AT_SYMLINK_NOFOLLOW) in place of lstat.
(fts_safe_changedir): Tweak semantics to reflect that this function
now calls cwd_advance_fd and hence consumes its FD argument.
lib/fts.c