diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2016-09-09 15:28:31 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2016-09-09 15:29:07 -0700 |
commit | 89e1fef97cfa4a9b6784d091c992a4b1e05b9a92 (patch) | |
tree | 465c8ae0398a1a903a508a0b4ce48139364d2b9f | |
parent | c6389a1340cdc2a74dbbba5db13df009ada3c04c (diff) | |
download | coreutils-89e1fef97cfa4a9b6784d091c992a4b1e05b9a92.tar.xz |
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.
-rw-r--r-- | m4/jm-macros.m4 | 3 | ||||
-rw-r--r-- | src/copy.c | 16 |
2 files changed, 12 insertions, 7 deletions
diff --git a/m4/jm-macros.m4 b/m4/jm-macros.m4 index 435c6ff41..a191af1de 100644 --- a/m4/jm-macros.m4 +++ b/m4/jm-macros.m4 @@ -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 diff --git a/src/copy.c b/src/copy.c index 191ccaaab..8cc5c5b72 100644 --- a/src/copy.c +++ b/src/copy.c @@ -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; |