emscripten exposes copy_file_range declaration but doesn't provide the implementation in the final link. Define the emscripten-specific stub function to avoid type conflict with the emscripten's header.
Signed-off-by: Kohei Tokunaga <ktokunaga.m...@gmail.com> --- block/file-posix.c | 6 ++++++ stubs/emscripten.c | 13 +++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 stubs/emscripten.c diff --git a/block/file-posix.c b/block/file-posix.c index 56d1972d15..22e0ed5069 100644 --- a/block/file-posix.c +++ b/block/file-posix.c @@ -110,6 +110,10 @@ #include <sys/diskslice.h> #endif +#ifdef EMSCRIPTEN +#include <sys/ioctl.h> +#endif + /* OS X does not have O_DSYNC */ #ifndef O_DSYNC #ifdef O_SYNC @@ -2010,6 +2014,7 @@ static int handle_aiocb_write_zeroes_unmap(void *opaque) return handle_aiocb_write_zeroes(aiocb); } +#ifndef EMSCRIPTEN #ifndef HAVE_COPY_FILE_RANGE static off_t copy_file_range(int in_fd, off_t *in_off, int out_fd, off_t *out_off, size_t len, unsigned int flags) @@ -2023,6 +2028,7 @@ static off_t copy_file_range(int in_fd, off_t *in_off, int out_fd, #endif } #endif +#endif /* * parse_zone - Fill a zone descriptor diff --git a/stubs/emscripten.c b/stubs/emscripten.c new file mode 100644 index 0000000000..2157d6349b --- /dev/null +++ b/stubs/emscripten.c @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +#include "qemu/osdep.h" +/* + * emscripten exposes copy_file_range declaration but doesn't provide the + * implementation in the final link. Define the stub here but avoid type + * conflict with the emscripten's header. + */ +ssize_t copy_file_range(int in_fd, off_t *in_off, int out_fd, + off_t *out_off, size_t len, unsigned int flags) +{ + errno = ENOSYS; + return -1; +} -- 2.25.1