From 5db7e4b1eefb3fab6a5e5808d718bfe74ee79bc0 Mon Sep 17 00:00:00 2001 From: Wayne Davison Date: Mon, 27 Jul 2020 16:36:55 -0700 Subject: Use linkat() if available Some OSes have a more capable linkat() function that can hard-link syslinks, so use linkat() when it is available. --- syscall.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'syscall.c') diff --git a/syscall.c b/syscall.c index 80cac204..b9c3b4ef 100644 --- a/syscall.c +++ b/syscall.c @@ -129,12 +129,16 @@ ssize_t do_readlink(const char *path, char *buf, size_t bufsiz) #endif #endif -#ifdef HAVE_LINK +#if defined HAVE_LINK || defined HAVE_LINKAT int do_link(const char *old_path, const char *new_path) { if (dry_run) return 0; RETURN_ERROR_IF_RO_OR_LO; +#ifdef HAVE_LINKAT + return linkat(AT_FDCWD, old_path, AT_FDCWD, new_path, 0); +#else return link(old_path, new_path); +#endif } #endif -- cgit v1.2.1