Open Unix.LargeFile to avoid "lstat: Value too large for defined data type".
authorRichard W.M. Jones <rjones@redhat.com>
Mon, 1 Feb 2021 10:07:02 +0000 (10:07 +0000)
committerHilko Bengen <bengen@debian.org>
Mon, 23 Aug 2021 12:26:58 +0000 (13:26 +0100)
commit1ef281fa1107eb2cf21c1ce6ef4f5b3fc42ea996
tree258c565ac6cc6958a7584dc363056391ace7a5e4
parentc5a51d9cc5185c3de9577a7bbcea4ca64b2c9255
Open Unix.LargeFile to avoid "lstat: Value too large for defined data type".

On 32 bit platforms, because OCaml native ints are limited to 31 bits,
there is a trap in the normal Unix.stat, Unix.lstat functions where
any field in the stat struct may overflow.  The result is random
errors like:

  supermin: error: lstat: Value too large for defined data type: /tmp/tmp.Ss9aYEBASm/d2/root

You would probably only see this on armv7.

The OCaml Unix module has a "LargeFile" submodule which fixes this by
using int64 for some (unfortunately not all) fields.

For more information see the OCaml sources, file
otherlibs/unix/stat.c, all instances of "EOVERFLOW".

Gbp-Pq: Name 0001-Open-Unix.LargeFile-to-avoid-lstat-Value-too-large-f.patch
src/format_chroot.ml
src/format_ext2.ml
src/format_ext2_initrd.ml
src/format_ext2_kernel.ml
src/mode_build.ml
src/package_handler.ml
src/ph_dpkg.ml
src/ph_pacman.ml
src/ph_rpm.ml
src/supermin.ml
src/utils.ml