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


Reply via email to