mirror of
git://git.sv.gnu.org/coreutils.git
synced 2026-02-15 03:41:57 +02:00
ln: port to platforms lacking O_DIRECTORY
* src/ln.c (main): Port to older platforms lacking support for POSIX.1-2008’s O_DIRECTORY flag (Bug#34876).
This commit is contained in:
14
src/ln.c
14
src/ln.c
@@ -610,13 +610,25 @@ main (int argc, char **argv)
|
||||
int flags = (O_PATHSEARCH | O_DIRECTORY
|
||||
| (dereference_dest_dir_symlinks ? 0 : O_NOFOLLOW));
|
||||
destdir_fd = openat_safer (AT_FDCWD, d, flags);
|
||||
int err = errno;
|
||||
if (!O_DIRECTORY && 0 <= destdir_fd)
|
||||
{
|
||||
struct stat st;
|
||||
err = (fstat (destdir_fd, &st) != 0 ? errno
|
||||
: S_ISDIR (st.st_mode) ? 0 : ENOTDIR);
|
||||
if (err != 0)
|
||||
{
|
||||
close (destdir_fd);
|
||||
destdir_fd = -1;
|
||||
}
|
||||
}
|
||||
if (0 <= destdir_fd)
|
||||
{
|
||||
n_files -= !target_directory;
|
||||
target_directory = d;
|
||||
}
|
||||
else if (! (n_files == 2 && !target_directory))
|
||||
die (EXIT_FAILURE, errno, _("target %s"), quoteaf (d));
|
||||
die (EXIT_FAILURE, err, _("target %s"), quoteaf (d));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user