1
0
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:
Paul Eggert
2019-03-16 11:24:19 -07:00
parent 6bd78f27fd
commit 6a707feee8

View File

@@ -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));
}
}