Jim Meyering [Tue, 24 Jan 2006 10:32:32 +0000 (10:32 +0000)]
(tail_forever): Don't exit-nonzero when an attempt
to put a regular file in O_NONBLOCK mode fails with EPERM.
That happens on Linux when using tail -f on a file with the
append-only attribute. Reported by Dean Gaudet. For details,
see http://savannah.gnu.org/bugs/?func=detailitem&item_id=15473.
Jim Meyering [Tue, 17 Jan 2006 17:26:15 +0000 (17:26 +0000)]
Include "openat.h".
Don't include "lchown.h".
(restricted_chown): Accept a new parameter, CWD_FD, and use it in
calling openat, lchownat, chownat, rather than open, lchown, chown.
Update caller.
Jim Meyering [Tue, 17 Jan 2006 17:25:42 +0000 (17:25 +0000)]
Now that fts no longer changes the current working directory, adjust
its clients accordingly -- note that du.c uses fts but doesn't need
any adjustment, since it doesn't operate on the actual files,
but rather just uses the stat buffers provided by fts.
Include "openat.h".
(process_file): Use chmodat (fts->fts_cwd_fd,... in place of chmod (...
Jim Meyering [Tue, 17 Jan 2006 17:24:14 +0000 (17:24 +0000)]
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.
Paul Eggert [Tue, 17 Jan 2006 07:21:48 +0000 (07:21 +0000)]
(gl_IGNORE_UNUSED_LIBRARIES): Don't use ldd, as it's not portable
and it doesn't work with cross-compiles. Fix missing-$ typo in 'test
"gl_cv_ignore_unused_libraries" ...' that prevented -zignore from being
used with Sun's C compiler.
Jim Meyering [Fri, 13 Jan 2006 13:35:26 +0000 (13:35 +0000)]
(AC_FUNC_GETMNTENT): Invoke AC_CHECK_FUNCS(getmntent)
unconditionally so that tests of $ac_cv_func_getmntent (e.g., in
gl_LIST_MOUNTED_FILE_SYSTEMS) need not double-quote uses that variable,
to accommodate the rare case in which getmntent is available in none
of the libraries checked. This happens at least on FreeBSD 5.0.
Paul Eggert [Thu, 12 Jan 2006 07:17:51 +0000 (07:17 +0000)]
(struct sha1_ctx): Use a word buffer, not a byte buffer,
so that we don't need to worry about alignment. All uses changed.
This merges the 2005-10-28 md5 change into sha1.
Jim Meyering [Wed, 11 Jan 2006 21:00:36 +0000 (21:00 +0000)]
(fts_stat): When following a symlink-to-directory,
don't interpret all stat-fails+lstat-succeeds as indicating a
dangling symlink. That can also happen at least for ELOOP.
The fix: return FTS_SLNONE only when the stat errno is ENOENT.
Jim Meyering [Wed, 11 Jan 2006 08:22:34 +0000 (08:22 +0000)]
(X2NREALLOC): Now that verify_true is no longer void,
cast its result to void, to avoid gcc's warning that
``left-hand operand of comma expression has no effect''.
(DECIMAL_DIGIT_ACCUMULATE, X2REALLOC): Likewise.
Jim Meyering [Tue, 10 Jan 2006 11:55:13 +0000 (11:55 +0000)]
Avoid the double-free (first in fts_read, second in fts_close) that
would occur when an `active' directory is made inaccessible (e.g.,
via chmod a-x) during a traversal.
(fts_read): After a failed fchdir, update sp->fts_cur
before returning. Reproduce this failure by
mkdir -p a/b; cd a; chmod a-x . b
Reported by Stavros Passas.