diff options
author | Dmitry V. Levin <ldv@strace.io> | 2021-01-04 08:00:00 +0000 |
---|---|---|
committer | Dmitry V. Levin <ldv@strace.io> | 2021-01-04 08:00:00 +0000 |
commit | 15af9719511da8485d3f93c3290e64d66586b4b3 (patch) | |
tree | cbb9ce8fb6996d01288f583e093470b339b88107 | |
parent | ed41699c5a79417a3d9d4704757eb2c95fc706d7 (diff) | |
download | strace-15af9719511da8485d3f93c3290e64d66586b4b3.tar.gz |
file_ioctl: compile unconditionally
* configure.ac (AC_CHECK_HEADERS): Remove linux/fiemap.h.
* types/fiemap.h: New file.
* xlat/fs_f_ioctl_cmds.in: Likewise.
* file_ioctl.c: Include "types/fiemap.h" instead of <linux/fiemap.h>.
Include "xlat/fs_f_ioctl_cmds.h" in XLAT_MACROS_ONLY mode.
(print_fiemap_extentm, file_ioctl): Use struct_fiemap instead of
struct fiemap, compile unconditionally.
-rw-r--r-- | configure.ac | 1 | ||||
-rw-r--r-- | file_ioctl.c | 21 | ||||
-rw-r--r-- | types/fiemap.h | 35 | ||||
-rw-r--r-- | xlat/fs_f_ioctl_cmds.in | 1 |
4 files changed, 45 insertions, 13 deletions
diff --git a/configure.ac b/configure.ac index 502c305d3..a736e70bd 100644 --- a/configure.ac +++ b/configure.ac @@ -415,7 +415,6 @@ AC_CHECK_HEADERS(m4_normalize([ linux/dqblk_xfs.h linux/falloc.h linux/fib_rules.h - linux/fiemap.h linux/hiddev.h linux/ip_vs.h linux/ipc.h diff --git a/file_ioctl.c b/file_ioctl.c index 7baa4d2b1..1dada177d 100644 --- a/file_ioctl.c +++ b/file_ioctl.c @@ -9,17 +9,17 @@ #include "defs.h" #include "print_fields.h" #include <linux/fs.h> - -#ifdef HAVE_LINUX_FIEMAP_H -# include <linux/types.h> -# include <linux/fiemap.h> -# include "xlat/fiemap_flags.h" -# include "xlat/fiemap_extent_flags.h" +#include "types/fiemap.h" +#include "xlat/fiemap_flags.h" +#include "xlat/fiemap_extent_flags.h" +#define XLAT_MACROS_ONLY +# include "xlat/fs_f_ioctl_cmds.h" +#undef XLAT_MACROS_ONLY static bool print_fiemap_extent(struct tcb *tcp, void *elem_buf, size_t elem_size, void *data) { - const struct fiemap_extent *fe = elem_buf; + const struct_fiemap_extent *fe = elem_buf; PRINT_FIELD_U("{", *fe, fe_logical); PRINT_FIELD_U(", ", *fe, fe_physical); @@ -30,16 +30,14 @@ print_fiemap_extent(struct tcb *tcp, void *elem_buf, size_t elem_size, void *dat return true; } -#endif /* HAVE_LINUX_FIEMAP_H */ int file_ioctl(struct tcb *const tcp, const unsigned int code, const kernel_ulong_t arg) { switch (code) { -#ifdef HAVE_LINUX_FIEMAP_H case FS_IOC_FIEMAP: { - struct fiemap args; + struct_fiemap args; if (entering(tcp)) tprints(", "); @@ -67,7 +65,7 @@ file_ioctl(struct tcb *const tcp, const unsigned int code, if (abbrev(tcp)) { tprints(", ..."); } else { - struct fiemap_extent fe; + struct_fiemap_extent fe; tprints(", fm_extents="); print_array(tcp, arg + offsetof(typeof(args), fm_extents), @@ -79,7 +77,6 @@ file_ioctl(struct tcb *const tcp, const unsigned int code, break; } -#endif /* HAVE_LINUX_FIEMAP_H */ default: return RVAL_DECODED; diff --git a/types/fiemap.h b/types/fiemap.h new file mode 100644 index 000000000..10f32e27b --- /dev/null +++ b/types/fiemap.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 The strace developers. + * All rights reserved. + * + * SPDX-License-Identifier: LGPL-2.1-or-later + */ + +#ifndef STRACE_TYPES_FIEMAP_H +# define STRACE_TYPES_FIEMAP_H + +# ifdef HAVE_LINUX_FIEMAP_H +# include <linux/types.h> +# include <linux/fiemap.h> +# endif + +typedef struct { + uint64_t fe_logical; + uint64_t fe_physical; + uint64_t fe_length; + uint64_t fe_reserved64[2]; + uint32_t fe_flags; + uint32_t fe_reserved[3]; +} struct_fiemap_extent; + +typedef struct { + uint64_t fm_start; + uint64_t fm_length; + uint32_t fm_flags; + uint32_t fm_mapped_extents; + uint32_t fm_extent_count; + uint32_t fm_reserved; + struct fiemap_extent fm_extents[0]; +} struct_fiemap; + +#endif /* STRACE_TYPES_FIEMAP_H */ diff --git a/xlat/fs_f_ioctl_cmds.in b/xlat/fs_f_ioctl_cmds.in new file mode 100644 index 000000000..d1710b760 --- /dev/null +++ b/xlat/fs_f_ioctl_cmds.in @@ -0,0 +1 @@ +FS_IOC_FIEMAP _IOWR('f', 11, struct_fiemap) |