cp: use FICLONE instead of BTRFS_IOC_CLONE

This doesn't affect the generated code on my system; it's merely
a cleaner way to use the recently-introduced Linux-specific API.
* m4/jm-macros.m4 (gl_CHECK_ALL_HEADERS): Check for linux/fs.h.
* src/copy.c: Include <linux.fs.h> if available.
(FICLONE) [__linux__]: Define if not already defined.
(clone_file): Use FICLONE instead of the older BTRFS_IOC_CLONE,
as this ioctl is no longer btrfs-specific.
This commit is contained in:
Paul Eggert 2016-09-09 15:28:31 -07:00
parent c6389a1340
commit 89e1fef97c
2 changed files with 12 additions and 7 deletions

View File

@ -1,4 +1,4 @@
#serial 110 -*- autoconf -*-
#serial 111 -*- autoconf -*-
dnl Misc type-related macros for coreutils.
@ -207,6 +207,7 @@ AC_DEFUN([gl_CHECK_ALL_HEADERS],
AC_CHECK_HEADERS_ONCE([
hurd.h
linux/falloc.h
linux/fs.h
paths.h
priv.h
stropts.h

View File

@ -74,6 +74,14 @@
# include <linux/falloc.h>
#endif
#ifdef HAVE_LINUX_FS_H
# include <linux/fs.h>
#endif
#if !defined FICLONE && defined __linux__
# define FICLONE _IOW (0x94, 9, int)
#endif
#ifndef HAVE_FCHOWN
# define HAVE_FCHOWN false
# define fchown(fd, uid, gid) (-1)
@ -320,12 +328,8 @@ sparse_copy (int src_fd, int dest_fd, char *buf, size_t buf_size,
static inline int
clone_file (int dest_fd, int src_fd)
{
#ifdef __linux__
# undef BTRFS_IOCTL_MAGIC
# define BTRFS_IOCTL_MAGIC 0x94
# undef BTRFS_IOC_CLONE
# define BTRFS_IOC_CLONE _IOW (BTRFS_IOCTL_MAGIC, 9, int)
return ioctl (dest_fd, BTRFS_IOC_CLONE, src_fd);
#ifdef FICLONE
return ioctl (dest_fd, FICLONE, src_fd);
#else
(void) dest_fd;
(void) src_fd;