On 5/7/17 7:50 PM, Zac Medico wrote: > The loff_t type is a GNU extension, so use the portable off_t > type instead. Also, enable Large File Support macros in setup.py, > for 64-bit offsets. > > Reported-by: Patrick Steinhardt <p...@pks.im> > X-Gentoo-bug: 617778 > X-Gentoo-bug-url: https://bugs.gentoo.org/show_bug.cgi?id=617778 > --- > setup.py | 5 ++++- > src/portage_util_file_copy_reflink_linux.c | 6 +++--- > 2 files changed, 7 insertions(+), 4 deletions(-) > > diff --git a/setup.py b/setup.py > index e993177..1ba6f87 100755 > --- a/setup.py > +++ b/setup.py > @@ -676,7 +676,10 @@ setup( > ['$sysconfdir/portage/repo.postsync.d', > ['cnf/repo.postsync.d/example']], > ], > > - ext_modules = [Extension(name=n, sources=m) for n, m in > x_c_helpers.items()], > + ext_modules = [Extension(name=n, sources=m, > + extra_compile_args=['-D_FILE_OFFSET_BITS=64', > + '-D_LARGEFILE_SOURCE', '-D_LARGEFILE64_SOURCE']) > + for n, m in x_c_helpers.items()], > > cmdclass = { > 'build': x_build, > diff --git a/src/portage_util_file_copy_reflink_linux.c > b/src/portage_util_file_copy_reflink_linux.c > index b031d96..2fb17a0 100644 > --- a/src/portage_util_file_copy_reflink_linux.c > +++ b/src/portage_util_file_copy_reflink_linux.c > @@ -66,7 +66,7 @@ initreflink_linux(void) > * (errno is set appropriately). > */ > static ssize_t > -cfr_wrapper(int fd_out, int fd_in, loff_t *off_out, size_t len) > +cfr_wrapper(int fd_out, int fd_in, off_t *off_out, size_t len) > { > #ifdef __NR_copy_file_range > return syscall(__NR_copy_file_range, fd_in, NULL, fd_out, > @@ -96,7 +96,7 @@ cfr_wrapper(int fd_out, int fd_in, loff_t *off_out, size_t > len) > * reaches EOF. > */ > static off_t > -do_lseek_data(int fd_out, int fd_in, loff_t *off_out) { > +do_lseek_data(int fd_out, int fd_in, off_t *off_out) { > #ifdef SEEK_DATA > /* Use lseek SEEK_DATA/SEEK_HOLE for sparse file support, > * as suggested in the copy_file_range man page. > @@ -189,7 +189,7 @@ _reflink_linux_file_copy(PyObject *self, PyObject *args) > ssize_t buf_bytes, buf_offset, copyfunc_ret; > struct stat stat_in, stat_out; > char* buf; > - ssize_t (*copyfunc)(int, int, loff_t *, size_t); > + ssize_t (*copyfunc)(int, int, off_t *, size_t); > > if (!PyArg_ParseTuple(args, "ii", &fd_in, &fd_out)) > return NULL;
This looks good to me. I tested it on amd64 and it works fine. -- Anthony G. Basile, Ph.D. Gentoo Linux Developer [Hardened] E-Mail : bas...@freeharbor.net GnuPG FP : 1FED FAD9 D82C 52A5 3BAB DC79 9384 FA6E F52D 4BBA GnuPG ID : F52D4BBA